簡體   English   中英

如何在Spring MVC中動態更新模型的屬性?

[英]How to dynamically update the attributes of a model in Spring MVC?

因此,我對Spring還是很陌生,並使用Spring Initializr創建了一個新項目。 我沒有任何配置.XMLs或類似的配置文件。 我按照本教程進行操作。

我的控制器類基本上如下所示:

@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正在使用Web上的不同API,例如,我的想法是每10小時從這些API中提取數據,或者在站點刷新時再次提取數據。

據我了解,我的方法應該在有人輸入URL localhost:8080 /時調用。 我的第一個想法基本上是10個小時后刷新站點。 刷新站點時會調用該方法,並且每次都會返回“儀表板”,但值不會更新。 要更新我的屬性,我必須重新啟動應用程序。 我正在查看@scheduled批注,但這對我沒有太大幫助,因為它僅適用於返回時間為空且沒有對象參數的方法。 因此,調度我的方法索引是行不通的,而且可能仍然是錯誤的方法。

我在這個主題上進行了很多搜索,但是對於這個特定的問題,我真的找不到解決方案,在該問題中,控制器方法中只有一個模型作為參數,之后想對其進行更新。

解決此問題的最佳方法是什么? 我正在檢查模型類的JavaDoc,但其中不包含remove / update方法。 我是否需要直接接近模型后面的HashMap並用現有鍵覆蓋屬性來更新它?

編輯:

為了更詳細地介紹InformationProvider類,它基本上是返回由從Java調用的cURL方法接收的String。 而已。

提前致謝

InformationProvider類需要在運行時更新

如果您嘗試調度此確切方法,則可能由於InformationProvider類是靜態類而在首次初始化時為數據提供服務。 很難看到那堂課發生了什么。 我寧願@Schedule一個填充此Object的服務,或者寧願從存儲中讀取該數據的存儲中。

關於您的實際問題,可以從不同的來源獲取。 @Schedule非常適合運行作業,但是除非您需要在服務器中緩存數據,否則我會避免使用。 如果可能的話,您可以實時進行數據處理,並且始終保持最新數據,並且更加輕松。

總的來說問題。 我將使用您可以調度的服務來獲取數據(緩存的速度至關重要),但是可以對其進行其他控制,例如從另一個端點強制刷新,在服務器端進行轉換,然后通過模型將其流式傳輸到您的頁面。 那應該是基本流程。

這個問題的解決方案非常簡單,我只需要例如通過javascript刷新頁面即可。 最好也可以通過調度來做到這一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM