【问题标题】:Display returned Java object in jsp page using Ajax使用 Ajax 在 jsp 页面中显示返回的 Java 对象
【发布时间】:2019-02-19 08:33:55
【问题描述】:

我有一个 jsp 页面,其中包含我用作视图的 html,我正在使用 Ajax 查询以获取 @ResponseBody 的休息端点和 jsp 中的脚本标记,它将每隔几秒调用一次 Ajax 函数。 Ajax 调用当前正在工作,并且至少按计划调用端点。

目前,当我在浏览器中导航到端点时,我会看到来自 Java 的 JSON 响应。

  1. 如何让它返回带有 html 的实际 JSP 页面?
  2. 当 Ajax 调用返回并将响应的值分配给 wrapper 变量时,我如何告诉页面更新每个字段?

我的控制器和 JSP 的一些代码 sn-ps。

控制器

@Controller
@RequestMapping("/")
public class BackgroundJobController {

    private BackgroundJobServiceImpl backgroundJobService = new BackgroundJobServiceImpl();

    @RequestMapping(value = "/home", method = RequestMethod.GET, produces = "application/json")
    public @ResponseBody Wrapper getHome() {
        Wrapper wrapper = new Wrapper();
        wrapper.setMessage("done");
        return wrapper;
    }
}

Home.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:set var="message" value="${wrapper.message}"></c:set>

<script type="text/javascript"
        src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
<script type="text/javascript">
  function getUpdate() {
    $.ajax({
      url : '/home',
      success : function(data) {
        $('#wrapper').html(data);
      }
    });
  }
</script>

<script type="text/javascript">
  var intervalId = 0;
  intervalId = setInterval(getUpdate, 3000);
</script>

  <Table class="messageTable">
    <c:if test="${not empty message}">
        <tr><td>${message}</td></tr>
    </c:if>
  </Table>

【问题讨论】:

  • 关键是要实现,wherewhen执行哪些代码-服务器上的JSP,什么时候请求和渲染页面(即之前响应被发送到浏览器),以及浏览器中的Javascript(即AJAX),之后浏览器接收到已经生成响应。
  • 哦,好吧,我对 JSP/Ajax/Spring 开发过程还很陌生。那么这是否意味着一旦我收到来自服务器的成功响应,我需要从 Ajax 调用/一些 Javascript 中更新我的所有字段?

标签: javascript java jquery ajax jsp


【解决方案1】:

在 Jozef 的评论的帮助下,我设法让它工作了。

我将&lt;script&gt; 标记移到正文的末尾,并将dataType: 'json' 添加到我的ajax 请求中,因此结果已经被解析。

一旦成功方法被调用,我就可以使用

      for (var i = 0; i < 9; i++) {
        uat += '<tr><td>' + message[i] + '</td>';
        uat += '</tr>';
      }
      document.getElementById("uatTable").innerHTML = uat;

建立表格和 document.getElementById("ID").innerHTML = data 在 hmtl 表中显示结果。

【讨论】:

  • document.getElementById("uatTable").innerHTML = uat; 行可以在for 循环之外。并使用for (var i = 0; i &lt; message.length; i++) { 处理所有消息。
  • 这实际上是我在我的代码中的方式,只是复制时出错。
猜你喜欢
  • 2022-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-26
相关资源
最近更新 更多