Java Spring MVC ajax重新发布用户界面副本
首先,我主要有Java Spring MVC ajax重新发布用户界面副本,java,jquery,ajax,jsf,spring-mvc,Java,Jquery,Ajax,Jsf,Spring Mvc,首先,我主要有JSF背景 我最近开始学习springmvc。困扰我的一件事是使用springmvc和JQuery时的ajax重新渲染 假设我在people.jsp视图中定义了一个复杂表单: <c:forEach var="person" items="${people}"> <table> <tr class="trPersonClass">...</tr> <tr>...</tr>
JSF
背景
我最近开始学习springmvc
。困扰我的一件事是使用springmvc
和JQuery
时的ajax重新渲染
假设我在people.jsp
视图中定义了一个复杂表单:
<c:forEach var="person" items="${people}">
<table>
<tr class="trPersonClass">...</tr>
<tr>...</tr>
</table>
</c:forEach>
那我该怎么办呢?我已经用我的jsp
中的c:forEach
标记定义了人员呈现的方式。我不想再重复了。我不想在这两个地方重复用户界面代码-在JQuery
done回调中,在我的视图中使用JSP
标记。在我看来,这很容易出错
请告诉我这里缺少什么。首先,Spring MVC非常灵活。您可以拥有返回视图引擎生成的HTML的后端处理程序,您可以拥有返回JSON/XML/ProtocolBuffers/等的处理程序,并使用客户端呈现引擎(如Mustache等)在浏览器中显示页面,或者您可以在同一应用程序中组合这两个处理程序 如果您想在服务器上生成HTML,SpringMVC允许您使用不同的模板引擎来实现。您可以使用JSP、Freemarker、Velocity等。为了做到这一点,它使用了ViewResolver抽象,并且在代码中您只需要处理ModelAndView API 有关ViewResolver的更多详细信息,请参见: 根据您的问题,听起来您有一个使用JSP创建html服务器端的后端。为了在用户单击刷新按钮时仅更新表而不重新加载整个页面,例如,您可以使用一个只返回html表的处理程序,如下所示:
@RequestMapping("/table")
public ModelAndView renderTable() {
List<People> people = peopleService.findAllPeople();
return new ModelAndView("/people", "people", people);
}
首先,SpringMVC非常灵活。您可以拥有返回视图引擎生成的HTML的后端处理程序,您可以拥有返回JSON/XML/ProtocolBuffers/等的处理程序,并使用客户端呈现引擎(如Mustache等)在浏览器中显示页面,或者您可以在同一应用程序中组合这两个处理程序 如果您想在服务器上生成HTML,SpringMVC允许您使用不同的模板引擎来实现。您可以使用JSP、Freemarker、Velocity等。为了做到这一点,它使用了ViewResolver抽象,并且在代码中您只需要处理ModelAndView API 有关ViewResolver的更多详细信息,请参见: 根据您的问题,听起来您有一个使用JSP创建html服务器端的后端。为了在用户单击刷新按钮时仅更新表而不重新加载整个页面,例如,您可以使用一个只返回html表的处理程序,如下所示:
@RequestMapping("/table")
public ModelAndView renderTable() {
List<People> people = peopleService.findAllPeople();
return new ModelAndView("/people", "people", people);
}
基本上,我看到两种选择:
基本上,我看到两种选择:
我认为
container.empty().html(数据)
不起作用,因为您尚未将人员返回为JSON
。这基本上就是我要问的。我必须在renderable
function-“”标记中复制用户界面代码,等等。我已经在我的jsp
中定义了它。为什么我要在renderable
函数中再次输入它?SpringMVC后端返回html,因此container.empty().html(数据)
只是将后端返回的html表嵌入到页面中。您没有复制任何视图逻辑。JSP负责创建html,并在服务器上完成。JavaScript负责更新页面的子集(表),它通过ajax调用服务器端,获取返回的html并替换先前呈现的表来实现。如果后端返回JSON,那么您需要某种方法在客户端创建html,但在这种情况下,html只在服务器上创建不起作用,因为您尚未将人员返回为JSON
。这基本上就是我要问的。我必须在renderable
function-“”标记中复制用户界面代码,等等。我已经在我的jsp
中定义了它。为什么我要在renderable
函数中再次输入它?SpringMVC后端返回html,因此container.empty().html(数据)
只是将后端返回的html表嵌入到页面中。您没有复制任何视图逻辑。JSP负责创建html,并在服务器上完成。JavaScript负责更新页面的子集(表),它通过ajax调用服务器端,获取返回的html并替换先前呈现的表来实现。如果后端返回JSON,那么您需要某种方法在客户端创建html,但在本例中,html仅在服务器上创建。
<body>
...
/* Content of div will be populated via ajax*/
<div id="myTableContainer" />
...
</body>
$(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);
});
}