在计时器上自动更新JSP页面

时间:2019-02-12 13:47:19

标签: javascript java spring-boot jsp

我有一个监视仪表板,该仪表板运行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>

1 个答案:

答案 0 :(得分:1)

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

这将无法以这种方式工作。 @Scheduled注释用于在服务器端上执行一些操作/作业。它不知道请求者(您的浏览器-客户端)。

要获取fresh数据,您需要:

1)定期(即每2分钟)从JSP页面调用Controller的终结点,然后解析数据(AJAX)。示例:A Simple AJAX with JSP example

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