2017-08-29 87 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適合運行作業,但我會避免,除非需要將數據緩存在服務器中。如果可能的話,你可以做到這一點,總是新的數據,更容易。

一般的問題。 我將獲取數據(緩存速度是至關重要的),與您可以安排一個服務,但是有超過例如它的其他控件強制從另一個端點刷新,在服務器端進行轉換,並通過模型將其流式傳輸到您的頁面。這應該是基本流程。