【问题标题】:Auto-update JSP page on timer在计时器上自动更新 JSP 页面
【发布时间】:2019-07-06 04:27:16
【问题描述】:

我有一个监控仪表板,它运行 java spring 作为后端并有一个 jsp 前端。目前,我将所有内容添加到 ModelAndView 中,包括存储所有数据并在 jsp 中显示的对象。设置@Scheduled 确实每分钟按预期运行该方法,但不会将更新的信息输出到浏览器。

有没有办法自动获取这些数据而不必每次都刷新页面?我在下面做的代码示例。

Java 控制器

@Scheduled(fixedRate = 60000)
@RequestMapping(method = RequestMethod.GET) // Set this to run every minute and return via @SendTo using the websockets
public ModelAndView getHome() {
    Wrapper wrapper = new Wrapper();
    UATIssues uatIssues = backgroundJobService.runGetCurrentUATIssues();
    wrapper.setUatIssues(uatIssues);
    ModelAndView modelAndView = new ModelAndView();
    modelAndView.addObject("wrapper", wrapper);
    modelAndView.setViewName("home");
    return modelAndView;
}

jsp文件

<table class="uatIssue">
<c:if test="${not empty uatTicketNumList}">
  <c:forEach items="${uatTicketNumList}" var="uatTicketNumList">
    <tr><td>${uatTicketNumList}</td></tr>
  </c:forEach>
</c:if>

【问题讨论】:

    标签: javascript java spring-boot jsp


    【解决方案1】:

    您希望您的@Scheduled 方法返回到哪个浏览器/客户端?

    这不会以这种方式工作。 @Scheduled 注解用于在服务器端做一些操作/工作。它不知道请求者(您的浏览器 - 客户端)。

    为了获得fresh 数据,您需要:

    1) 按时间从 JSP 页面调用 Controller 的端点,即每 2 分钟一次,然后解析数据 (AJAX)。示例:A Simple AJAX with JSP example

    2) 实施 Web 套接字,当发生更改时,您的前端将立即收到通知。更多:https://spring.io/guides/gs/messaging-stomp-websocket/

    【讨论】:

    • 我可能会尝试实现网络套接字。这是否仍支持返回 Java 对象并以我目前的方式访问它们?
    • 您可以使用 websockets 返回任何 Java 对象
    • 顺便说一下,这是更难的解决方案。但是按照本教程,我相信你会得到它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-02
    • 1970-01-01
    • 1970-01-01
    • 2014-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多