Spring MVC ajax重新渲染用户界面重复
首先,我主要是JSF
背景。
我最近开始研究Spring MVC
。 困扰我的一件事是使用Spring MVC
和JQuery
时的ajax重新渲染。
让我们想象一下,我在people.jsp
视图中定义了一个复杂的表单:
... ...
我在下面有一个refresh
按钮。 单击刷新按钮时,我想用ajax
让people
重新渲染。
function refreshButtonClicked() { $.ajax({ type: "GET", url: "ajax/loadPeople.do" }).done(function( msg ) { //WHAT SHOULD I DO HERE??? } });
那我该怎么做呢? 我已经定义了人物渲染应该如何c:forEach
我的jsp
的c: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个选项:
- 始终使用ajax加载表,即使在第一次渲染时(仅在javascript函数中创建表创建代码)
- 修改ajax / loadPeople.do以返回已呈现的表而不是Json列表。 然后,您可以将人员表呈现代码分解为JSP标记文件,或使用一些模板库(切片等)来重用该JSP片段。