2017-08-29 86 views
0

所以我对Spring很新,并使用Spring Initializr创建一个新项目。我没有任何配置.XML或类似的配置文件。我跟着这个tutorial去做事。如何在Spring MVC中动态更新模型的属性?

我的控制器类基本上看起来像下面这样:

@Controller 
@Configuration 
@EnableScheduling 
public class IndexController { 

@GetMapping("/") 
public String index(Model m) { 
     m.addAttribute("Title", "New Website"); 
     m.addAttribute("MenuOne", InformationProvider.getMenuOneLink()); 
     m.addAttribute("MenuTwo", InformationProvider.getMenuTwoLink()); 
     m.addAttribute("StaffNumber", InformationProvider.getNumberOfStaff()); 
     m.addAttribute("Birthdays", InformationProvider.getBirthdaysOfToday()); 

    return "dashboard"; 
} 

}

这工作得很好,一切都在做什么它应该是。不幸的是,需要在运行时更新由InformationProvider类获取其数据的属性。 InformationProvider正在接近网络上的不同API,我的想法要么是每10小时从这些API中提取数据,要么在网站刷新时再次提取数据。

从我的理解我的方法是应该被称为每次有人输入URL本地主机:8080 /。我的第一个想法基本上是10小时后刷新网站。该方法在网站刷新时调用,并且每次都返回“仪表板”,但值不会更新。要更新我的属性,我必须重新启动我的应用程序。我正在查看@scheduled注释,但这并没有真正帮助我,因为它仅适用于返回时间为无效并且没有对象参数的方法。因此,调度我的方法索引不起作用,并且可能是错误的方式。

我在Google上搜寻关于这个话题有很多,但我真的无法找到特定问题,你只有一个模型参数,在控制器的方法,并希望以后更新的解决方案。

,这是什么问题最好的方法?我正在检查模型类的JavaDoc,但它不包含remove或update方法。我是否需要直接访问模型后面的HashMap,并用现有密钥覆盖属性以更新它?

编辑:

更具体有关InformationProvider类,它基本上是由返回从Java称为卷曲方法接受一个字符串。而已。

在此先感谢

+1

避免在应用程序中使用静态方法:Spring已经构建了大量的工具,允许您的应用程序根据Spring容器中的依赖关系解析进行工作。 –

回答

0

这个问题的解决方案非常简单,我只需要通过javascript刷新页面。可能也可以通过排程来做到这一点。

0

InformationProvider类需要在运行时

进行更新。如果你试图安排这个确切的方法,它可能是由于InformationProvider类是一个静态类,它在首次初始化时提供数据。没有看到该班会发生什么,很难说。我宁愿@Schedule填充此对象的服务,或者更确切地说,从存储中读取缓存的数据。

关于你真正的问题,从不同的来源获取。 @Schedule适合运行作业,但我会避免,除非需要将数据缓存在服务器中。如果可能的话,你可以做到这一点,总是新的数据,更容易。

一般的问题。 我将获取数据(缓存速度是至关重要的),与您可以安排一个服务,但是有超过例如它的其他控件强制从另一个端点刷新,在服务器端进行转换,并通过模型将其流式传输到您的页面。这应该是基本流程。