我迫切需要找到一种方法来定期调用@RequestMapping注释的方法。 该项目似乎很简单。但这种简单性需要付出代价。 通过Spring Integration中的poller对象,我可以定期从文件中读取更新的数据。 Spring Poller对象接受我通过读取.properties文件提供的interval属性。定期数据写入@Component,我将其注入控制器以填充模型:
@Autowired
Results results;
@RequestMapping("/")
String exposeResults(ModelMap model) {
model.addAttribute("errors", results.getErrorCount());
model.addAttribute("warnings", results.getWarningCount());
return "results";
}
模型数据通过一些基本的html / jsp显示。 我实际上是在使用FreeMarker时开始关注Spring Boot的一些教程,它为FreeMarker提供了一些特定的启动器。
问题是我无法使html(ftl)自动重新加载以与更新的模型保持一致(它在控制台日志中确实更新,或者如果我手动刷新页面)。
@Scheduled(fixedRate =..)
似乎不适用于使用@RequestMapping
注释的MVC方法,因为此类方法具有args并返回非void。
而且我不考虑使用jquery ajax获取,因为我没有看到如何将javascript属性作为setInterval(function() {$("#displayarea").load(url); }, 10000);
等javascript代码中所需的常量提供...显然像${polling.interval}
这样的占位符在这里不起作用。我错了吗?
我必须承认我试图实现`java.util.Observable-Observer'对,但失败了。
我觉得不应该那么复杂,并且会欣赏任何新鲜的想法。 谢谢
答案 0 :(得分:0)
我迫切需要找到一种方法来调用定期使用@RequestMapping注释的方法
你为什么要这样做?!它处理来自服务器上客户端的请求,如果您只是从服务器调用它,它将不会更新您的客户端强>
setInterval(function() {$("#displayarea").load(url); }, 10000);
这正是您需要做的${polling.interval}
是自由标记语法,它将从名为interval
的{{1}}或Map
中检索polling
密钥名为interval
的对象的属性,因此您不需要仅polling
就足够了。将其设置在您的freemarker模型中,使用freemarker处理具有javascript的文件并完成。
当然,有一些方法可以使用WebSocket来设置来自服务器的推送,但是对于你需要的东西,这将是一种过度杀伤。