如何将参数从带有Thymeleaf的HTML传递给Spring Controller?

时间:2017-02-28 09:41:51

标签: spring-boot thymeleaf

我在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中(但我想知道如何将它发送到控制器,而不管它在哪里)。 谢谢你的帮助!

1 个答案:

答案 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中,但它不是你的情况,所以你必须使用正常输入标签