我在Spring Boot中有一个控制器需要通过POST接收参数和对象。该参数不是if的对象或部分。
这是没有参数的Thymeleaf形式。它在独立页面中工作正常,但是当我在显示文章的页面中使用它时,相同的代码不起作用:
<form th:action="@{/addcomment}" th:object="${comment}" method="post">
<input type="text" th:field="*{commenttext}" />
<button type="submit">send</button>
</form>
因为当我添加
<input type="hidden" th:field="*{id}" th:with="id=1" value="${id}"/>
或
<input type="hidden" th:field="*{id}"/>
或
<input type="hidden" th:field="*{id}" value="1"/>
我的控制器在控制台中打印0,当值应为1 ...(即使我将其更改为value =“true”....这来自Chrome控制台:
<input type="hidden" class="sr-only" value="0" id="id" name="id" />
无论我使用什么
@RequestMapping(value = "/addcomment", method = RequestMethod.POST)
ModelAndView addStatus(ModelAndView modelAndView, @Valid Comment comment, @RequestParam("id") Long id, BindingResult result) {
Comment commentform = new Comment();
Announcement announcement = announcementService.readAnnouncement(id);
String sanatizedcommenttext = htmlPolicy.sanitize(comment.getCommenttext());
commentform.setCommenttext(sanatizedcommenttext);
commentform.setDate(new Date());
commentform.setAnnoucements(announcement);
modelAndView.setViewName("addcomment");
if (!result.hasErrors()) {
commentService.createComment(commentform);
modelAndView.getModel().put("comment2th", new Comment());
modelAndView.setViewName("redirect:/addcomment");
}
return modelAndView;
}
顺便说一句,参数在url中(但我想知道如何将它发送到控制器,而不管它在哪里)。 谢谢你的帮助!
答案 0 :(得分:1)
您只需添加此更改
<input type="hidden" name="paramName" value="1"/>
在您的控制器
中@RequestMapping(value = "/addcomment", method = RequestMethod.POST)
ModelAndView addStatus(ModelAndView modelAndView, @Valid Comment comment, @RequestParam("paramName") Long id, BindingResult result) {
问题是,你使用百万美元标签作为输入字段,然后Spring将属性 id 放在对象Comment中,但它不是你的情况,所以你必须使用正常输入标签