如何传递:从html到控制器的对象值

时间:2015-08-17 07:54:47

标签: java html spring-boot thymeleaf modelattribute

如何将百万美元(th:object)值传递给控制器​​。

HTML:

<form id="searchPersonForm" action="#" th:object="${person}" method="post" >  
</form>

SearchPersonController:

@RequestMapping(value = "/modify/{pid}", method = RequestMethod.GET)
    public String modifyPersonData(Principal principal, @ModelAttribute("person") Person person, UserRoles userRoles, Model model, @PathVariable("pid") Long pid ) {
         //modify data
    }

我尝试传递@ModelAttribute("person") Person person,但这不是从上一页检索表单值。

任何人都可以帮忙解决这个问题。

感谢。

1 个答案:

答案 0 :(得分:6)

最好使用th:action作为表单属性而不是action,并指定绑定,如下所示:

<form th:action="@{/the-action-url}" method="post"
    th:object="${myEntity}">

    <div class="modal-body">
        <div class="form-group">
            <label for="name">Name</label> <input type="text"
                class="form-control" id="name" th:field="*{name}"> </input>
        </div>

        <div class="form-group">
            <label for="description">Description</label> <input type="text"
                class="form-control" id="description"
                th:field="*{description}"> </input>
        </div>
    </div>
</form>

我使用Spring控制器备份此表单,该控制器初始化模型属性(表单中的myEntity对象)。这是控制器类的相关部分:

@ModelAttribute(value = "myEntity")
public Entity newEntity()
{
    return new Entity();
}

@ModelAttribute注释确保Spring为每个请求初始化模型对象。

在对控制器的第一个get请求期间设置名为“command”的模型:

@RequestMapping(value = "/", method = RequestMethod.GET)
public ModelAndView getRanks(Model model, HttpServletRequest request)
{
    String view = "the-view-name";
    return new ModelAndView(view, "command", model);
}

并且,要在表单提交后访问模型,请实现相对方法:

@RequestMapping(value = "/the-action-url", method = RequestMethod.POST)
public View action(Model model, @ModelAttribute("myEntity") Entity myEntity)
{
    // save the entity or do whatever you need

    return new RedirectView("/user/ranks");
}

此处,使用@ModelAttribute注释的参数会自动绑定到提交的对象。