Поэтому я пытаюсь добавить в приложение простую функцию комментирования после отображения продукта. Допустим, у меня следующий поток операций:
- найдите продукт и нажмите ввод
- отобразятся сведения о продукте и он имеет следующий URI:
/search?beerName=Trashy+Blonde
- запись комментарий
- после нажатия кнопки "Отправить" мы остаемся на той же странице, и новый комментарий добавляется в базу данных (в дальнейшем он только обновит sh часть страницы)
Таким образом, я застрял между пунктами 3 и 4. В настоящее время у меня есть страница html, которая содержит информацию о продукте и форму для отправки нового комментария:
<div class="container" th:if="${beer}">
<br/>
<!-- Beer details -->
<div class="card mb-3" >
<div class="row">
<div class="col-md-4" style="margin: auto; display: block;">
<img style=" display: block; max-width:200px; max-height:250px; width: auto; height: auto;" class="card-img img-responsive mx-auto d-block" th:src="${beer.getImageUrl()}"/>
</div>
<div class="col-md-8" style="margin: auto; display: block;">
<div class="card-block px-2">
<h4 th:text="${beer.getName()}">Name</h4>
<p th:text="${beer.getDescription()}">Description</p>
<p th:text="${beer.getFirstBrewed()}">First Brewed</p>
<p th:text="${beer.getAbv()}">Abv</p>
<p th:text="${beer.getIbu()}">Ibu</p>
</div>
</div>
</div>
</div>
<!-- TODO user comment-->
<div th:block sec:authorize="isAuthenticated()">
<div class="row" id="post-review-box">
<div class="col-md-12">
<form method="post" th:action="@{/review}" th:object="${reviewFormObject}">
<input id="beer-object" type="hidden">
<textarea class="form-control animated" cols="50" id="new-review" name="comment"
placeholder="Enter your review here..." rows="5" th:field="*{message}"></textarea>
<div class="text-right">
<button class="btn btn-success btn-lg" type="submit">Save</button>
</div>
</form>
</div>
</div>
</div>
</div>
И форму для отправки объекта:
public class ReviewFormObject {
@NotEmpty
private String message;
private Beer beer;
Итак, как вы можете видеть, я хотел бы иметь возможность передать вместе с объектом продукта сообщения, который уже отображен, любую идею, если это возможно или даже имеет смысл? ИЛИ, может быть, я переусердствовал что-то подобное?
Код для контроллеров выглядит так: Поиск:
@GetMapping("/search")
public ModelAndView searchBeer(@ModelAttribute("beerFormObject") @Valid BeerFormObject beerFormObject,
@ModelAttribute("reviewFormObject") ReviewFormObject reviewFormObject,
BindingResult result) {
if (result.hasErrors()) {
return new ModelAndView("/index");
}
Beer beer = beerService.findByName(beerFormObject.getBeerName());
if (beer == null) {
try {
beer = beerRestService.findByName(beerFormObject.getBeerName());
} catch (ObjectNotFoundInExternalApiException e) {
//TODO add exception handling and redirect to creating new beer
return new ModelAndView("/index");
}
}
ModelAndView modelAndView = new ModelAndView("/beer-search-result");
modelAndView.addObject("beer", beer);
return modelAndView;
}
postReview:
@PostMapping("/review")
public String postReview(@ModelAttribute("reviewFormObject") @Valid ReviewFormObject reviewFormObject, BindingResult result){
//doing nothung currently
return "/test";
}