首先,我主要用JSF
的背景。
我已经开始学习新Spring MVC
。 使用时,一件事是困扰我的是阿贾克斯重新渲染Spring MVC
和JQuery
。
让我们想象一下,我已经在我的定义的复杂形式people.jsp
观点:
<c:forEach var="person" items="${people}">
<table>
<tr class="trPersonClass">...</tr>
<tr>...</tr>
</table>
</c:forEach>
我有一个refresh
按钮下。 当单击刷新按钮,我想与ajax
的people
重新呈现。
function refreshButtonClicked() {
$.ajax({
type: "GET",
url: "ajax/loadPeople.do"
}).done(function( msg ) {
//WHAT SHOULD I DO HERE???
}
});
所以,我应该怎么办呢? 我已经定义了如何渲染的人应与喜欢c:forEach
标签在我jsp
。 我不想再说了。 我不希望在两地重复用户界面代码-在JQuery
完成回调,并用JSP
在我的意见标签。 这是很容易出错在我看来。
敬请解释我什么,我在这里失踪。
首先,Spring MVC的是非常灵活的。 你可以有后台处理程序返回由视图引擎生成的HTML,你可以有一个处理程序返回JSON / XML / ProtocolBuffers /等。 并使用客户端渲染引擎,如胡须等在浏览器中显示的页面,也可以在同一应用程序将二者结合起来。
如果你想在服务器上生成HTML,Spring MVC的允许你使用不同的模板引擎来做到这一点。 您可以使用JSP,Freemarker的,速度等。为了做到这一点,它使用一个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> people = peopleService.findAllPeople();
return new ModelAndView("/people", "people", people);
}
我也假设你有另一个处理程序,返回所在的表是通过AJAX嵌入主页。
<body>
...
/* Content of div will be populated via ajax*/
<div id="myTableContainer" />
...
</body>
的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);
});
}