2017-02-14 70 views
0

我想知道如何防止Thymeleaf中同一模型的多個實例,例如:在頭上顯示用戶名。如何防止同一模型的多個實例

<span th:text="${username}">User Name</span> 

控制器:

@RequestMapping(value = "/", method = RequestMethod.GET) 
public String index(Model model) { 
    model.addAttribute("username", "User Name"); 
    return "index.html"; 
} 

@RequestMapping(value = "/admin", method = RequestMethod.GET) 
public String admin(Model model) { 
    model.addAttribute("username", "User Name"); 
    return "indexAdmin.html"; 
} 

@RequestMapping(value = "/page", method = RequestMethod.GET) 
public String page(Model model) { 
    model.addAttribute("username", "User Name"); 
    return "page.html"; 
} 
+1

你可以把用戶名被刪除的會話,並且可以在thymeleaf訪問它,因此你能避免重複的代碼。 – Apollo

回答

0

Spring允許你做到以下幾點:

@ModelAttribute("username") 
public String username() { 
    return "User Name"; 
} 

此代碼將設置爲正由一個封閉處理的每個請求的「用戶名」屬性控制器。您還可以訪問幾乎所有可用於@RequestMapping方法(包括模型對象本身)的參數。

如上面的註釋中所述,如果您希望跨特定用戶的請求保留某個對象(例如從數據庫中獲取並使用該實例填充模型),則可以創建@SessionAttributes處理程序或將該對象手動進入會話。

看來,「thymeleaf」標籤可以從問題

+0

感謝您的回覆!正如你在sniped代碼中顯示的那樣,用戶名模型屬性將永遠是「用戶名」,不是嗎?所以......我認爲@Apollo解決方案更加靈活。你怎麼看? –

+1

這取決於您的需求。只有兩種選擇。 ModelAttribute處理程序將在每個請求上被調用。如果您希望跨某個特定用戶(會話)的請求保留某個對象,則可以使用@SessionAttributes或手動將該對象手動放入會話中。如果您正在設置登錄用戶的用戶名,那麼(很有可能)用戶本身已經在會話中,對吧? – Ivan

相關問題