当将两个相同类型的实例绑定到两个Spring MVC表单时,会发生自动数据绑定



在jsp文件中:

<sf:form ... action="queryUser" modelAttribute="user_a">
    <sf:input path="name"/>
   <input type="submit" id="submit1"/>
</sf:form>
<sf:form ...action="addUser" modelAttribute="user_b">
    <sf:input path="name"/>
   <input type="submit" id="submit2"/>
</sf:form>

在Java文件中:

@Controller
@RequestMapping("/user")
@SessionAttributes("user_a")
public class UserController
{
   ...
   RequestMapping("/addUser")
   public void function(@ModelAttribute("user_a") User user_a,@ModelAttribute("user_b") User user_b,BindingResult bindingResult)
{
  ...
}
}

问题是:当我点击submit2时。请求实体userb将被传递给usera和userb!!

谁知道如何区分它们??

我想我解决了这个问题。当在类似问题的情况下:

RequestMapping("/addUser")
public void function(@ModelAttribute("user_a") User user_a,@ModelAttribute("user_b") User user_b,BindingResult bindingResult)
{
  ...
}

在一个控制器的函数中使用两个相同类型的对象,而不想同时修改某个对象的唯一可能性是其中一个对象以前已经填充过,并且您想在该函数中使用它。或者您同意同时修改这两个实体(在这种情况下,您将传递两个不同的实体)。因此,在我遇到的情况下,不要在函数的参数中列出对象。您可以通过以下代码访问现成的模型属性:

RequestMapping("/addUser")
public void function(Model model,@ModelAttribute("user_b") User user_b,BindingResult bindingResult)
{
  // if this is a session attribute, it will not be changed.
  User user_a = model.get("user_a");
  //more codes go here
}

总之,当函数的参数列表中只有一个有效对象并且有多个相同类型的对象时,springMVC框架会将请求的一个有效的对象绑定到所有相同类型的变量。一句话原则:当并且仅当您将变量列在函数的参数列表中时,才会对其进行绑定操作。

最新更新