Spring MVC ajax重新渲染用户界面重复

首先,我主要是JSF背景。

我最近开始研究Spring MVC 。 困扰我的一件事是使用Spring MVCJQuery时的ajax重新渲染。

让我们想象一下,我在people.jsp视图中定义了一个复杂的表单:

  ......

我在下面有一个refresh按钮。 单击刷新按钮时,我想用ajaxpeople重新渲染。

 function refreshButtonClicked() { $.ajax({ type: "GET", url: "ajax/loadPeople.do" }).done(function( msg ) { //WHAT SHOULD I DO HERE??? } }); 

那我该怎么做呢? 我已经定义了人物渲染应该如何c:forEach我的jspc:forEach标记。 我不想再重复一次。 我不想在两个地方复制用户界面代码 – 在JQuery完成的回调中以及在我的视图中使用JSP标记。 在我看来,这很容易出错。

请帮我解释一下我在这里缺少什么。

首先,Spring MVC非常灵活。 您可以拥有返回由视图引擎生成的HTML的后端处理程序,您可以拥有一个返回JSON / XML / ProtocolBuffers / etc的处理程序。 并使用像Mustache等客户端渲染引擎在浏览器中显示页面,或者您可以将两者结合在同一个应用程序中。

如果要在服务器上生成HTML,Spring MVC允许您使用不同的模板引擎来执行此操作。 您可以使用JSP,Freemarker,Velocity等。为了做到这一点,它使用ViewResolver抽象,在您的代码中您只需要处理ModelAndView API。

有关ViewResolver的更多详细信息,请访问: http : //static.springsource.org/spring/docs/3.0.x/reference/mvc.html

基于您的问题,听起来您有一个使用JSP创建html服务器端的后端。 为了在用户单击刷新按钮时仅更新表而不重新加载整个页面,您可以使用一个只返回html表的处理程序,如下所示:

 @RequestMapping("/table") public ModelAndView renderTable() { List people = peopleService.findAllPeople(); return new ModelAndView("/people", "people", people); } 

我还假设你有另一个处理程序返回通过ajax嵌入表的主页面。

  ... /* Content of div will be populated via ajax*/ 
...

这个javaScript就像这样:

 $(function() { var myTableContainer = $("#myTableContainer"); var renderTable = function(container) { $.get("/table", function(data) { container.empty().html(data); } }; /* This is called on document ready */ renderTable(myTableContainer); /* Use the same renderTable function when the refresh button is clicked */ $("#refreshButton").click(function() { renderTable(myTableContainer); }); } 

基本上,我看到2个选项:

  1. 始终使用ajax加载表,即使在第一次渲染时(仅在javascript函数中创建表创建代码)
  2. 修改ajax / loadPeople.do以返回已呈现的表而不是Json列表。 然后,您可以将人员表呈现代码分解为JSP标记文件,或使用一些模板库(切片等)来重用该JSP片段。