Spring 没有从表单提交中读取模型属性
Spring not reading model attributes from form submission
在我当前的 spring-boot 项目中,我有这样的形式:
<form class="form-container" id="form" method="post" th:object="${command}" th:action="@{/usuario/register}">
...
<div class="form-row">
<div class="col-25">
<label for="login">Login</label>
</div>
<div class="col-75">
<input type="text" id="login" th:field="*{username}" placeholder="Login">
</div>
</div>
...
</form>
由这个 spring 控制器处理:
@RequestMapping(value = "/register", method=RequestMethod.POST)
@ResponseBody
public void doRegister(@Valid Usuario object, BindingResult result) throws Exception {
this.serv.register(object);
}
我的问题是 object
得到一个空值,不允许程序持久保存数据。显示变量 object
和 result
的内容,它们显示为 null;但如果我尝试使用以下参数显示参数值:
System.out.println("result.model.username: "+result.getModel().get("username"));
显示了正确的值。这里有什么问题,为什么 @Valid Usuario object, BindingResult result
给我一个空值,但 HttpServletRequest
得到正确的值?
更新
根据下面的建议,我试试这个:
@ModelAttribute(value = "usuario")
public Usuario newEntity()
{
return new Usuario();
}
@RequestMapping(value = "/register", method=RequestMethod.GET)
public String formRegister(Model model) {
model.addAttribute("command", newEntity());
return "register";
}
@RequestMapping(value = "/register", method=RequestMethod.POST)
@ResponseBody
public void doRegister(@ModelAttribute("usuario") Usuario object) throws Exception {
this.serv.register(object);
}
但是遇到了同样的问题。
我设法通过更改参数解决了这个问题:
@ModelAttribute("usuario") Usuario object
至:
@ModelAttribute("command") Usuario object
按照上面评论中的建议(来自M.Deinum)
在我当前的 spring-boot 项目中,我有这样的形式:
<form class="form-container" id="form" method="post" th:object="${command}" th:action="@{/usuario/register}">
...
<div class="form-row">
<div class="col-25">
<label for="login">Login</label>
</div>
<div class="col-75">
<input type="text" id="login" th:field="*{username}" placeholder="Login">
</div>
</div>
...
</form>
由这个 spring 控制器处理:
@RequestMapping(value = "/register", method=RequestMethod.POST)
@ResponseBody
public void doRegister(@Valid Usuario object, BindingResult result) throws Exception {
this.serv.register(object);
}
我的问题是 object
得到一个空值,不允许程序持久保存数据。显示变量 object
和 result
的内容,它们显示为 null;但如果我尝试使用以下参数显示参数值:
System.out.println("result.model.username: "+result.getModel().get("username"));
显示了正确的值。这里有什么问题,为什么 @Valid Usuario object, BindingResult result
给我一个空值,但 HttpServletRequest
得到正确的值?
更新
根据下面的建议,我试试这个:
@ModelAttribute(value = "usuario")
public Usuario newEntity()
{
return new Usuario();
}
@RequestMapping(value = "/register", method=RequestMethod.GET)
public String formRegister(Model model) {
model.addAttribute("command", newEntity());
return "register";
}
@RequestMapping(value = "/register", method=RequestMethod.POST)
@ResponseBody
public void doRegister(@ModelAttribute("usuario") Usuario object) throws Exception {
this.serv.register(object);
}
但是遇到了同样的问题。
我设法通过更改参数解决了这个问题:
@ModelAttribute("usuario") Usuario object
至:
@ModelAttribute("command") Usuario object
按照上面评论中的建议(来自M.Deinum)