最近我一直在和我的Spring MVC应用程序一起遇到同样的问题,我正试图想出一个长期的解决方案。
问题在于,在标准的Spring 3控制器中,添加模型对象,指定视图名称(内联或从某个注入的字段)并返回。我遇到的问题是,如果你有一个请求返回一个人的页面,他们的宠物你有类似的东西(不可编译,伪造):
@RequestMapping( value="personOverview", method="GET" )
public String getPersonOverview(model) {
model.add(personRepo.getPerson( theName ));
model.add(petRepo.getPetsForPerson( thePerson ));
return "personOverviewViewName";
}
现在,在您的视图中,您将能够呈现所有这些信息。然而,当有人为该人更新“宠物”时,问题就出现了,而您只想重新呈现显示宠物的页面部分。
您不仅需要在JSP片段或JavaScript中重写渲染逻辑,而且还需要为getPersonOverview方法的每个部分复制控制器代码。如果您要将控制器方法分解为较小的块,那么您将无法呈现整个页面,但必须使用单独的请求呈现每个块。
在普通的ModelViewController模式中,解决方案是视图可以访问模型,但在Spring MVC中,模型是Java并且位于请求层之后,因此您需要为每个模型对象构建请求处理程序
我知道这个问题可能看起来有点抽象,但我正在寻找的是可用于构建包含许多模型对象的完整页面的模式或原则,但也能够更新页面的某些部分没有重复的ajax。