Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring MVC ajax重新发布用户界面副本_Java_Jquery_Ajax_Jsf_Spring Mvc - Fatal编程技术网

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);
}

基本上,我看到两种选择:

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

  • 基本上,我看到两种选择:

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

  • 我认为
    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);
      });
    }