0

在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. 请求实体 user_b 将同时传递给 user_a 和 user_b!!

谁知道怎么区分??

4

1 回答 1

0

我想我找到了问题所在。在出现问题的情况下:

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
}

综上所述,当函数的参数列表中只有一个有效对象且有多个同类型对象时,spring MVC框架会将请求的一个有效对象绑定到所有同类型变量上。一句话原则:当且仅当你在函数的参数列表中列出变量时,才会发生对变量的绑定操作。

于 2015-02-06T09:35:18.153 回答