一、Thymeleaf Model
在Thymeleaf中,Model是一個接口,允許控制器向視圖注入數據。添加屬性到Model是通過鍵值對的形式進行操作的,映射到View中。
在控制器中添加屬性到Model的方式如下:
@RequestMapping("/user")
public String getUser(Model model) {
User user = new User();
user.setUsername("xiaoming");
user.setAge(18);
model.addAttribute("user", user);
return "user";
}
在上述示例中,我們添加一個名為「user」的屬性到Model中,值為一個名為User的JavaBean。我們將這個Model數據傳給名為user的視圖。現在,我們在user.html中可以使用以下代碼:
Name:
Age:
在上述代碼中,我們使用Thymeleaf的表達式語言來獲取Model中的屬性值。在這種情況下,我們可以獲取存儲在名為’user’的Model屬性中的用戶名和年齡。
二、Thymeleaf獲取不到Model里的值
當模型中缺少屬性或屬性值為null時,Thymeleaf無法找到Model中缺少的屬性並拋出異常。為了避免這種情況,我們可以使用Thymeleaf的安全導航運算符(?)來解決這個問題。
如果屬性值為null,表達式會返回null而不會拋出異常。例如:
Name:
Age:
在上述代碼中,安全導航運算符「?」用於獲取名為’user’的Model屬性中的用戶名和年齡,並防止如果屬性為null時拋出異常。
三、Thymeleaf取不到Model值
在有些情況下,雖然我們已經將屬性添加到Model中,但Thymeleaf仍然無法檢測到這些屬性。這可能是由於以下原因之一:
- 屬性名稱有誤
- 視圖名稱錯誤
- 模型未正確傳遞給視圖
下面是一些可能導致Thymeleaf無法找到Model值的示例:
1. 屬性名稱有誤
在控制器方法中添加屬性時,請確保屬性名稱與視圖中使用的屬性名稱匹配。否則,Thymeleaf將無法檢測到屬性值。
@RequestMapping("/user")
public String getUser(Model model) {
User user = new User();
user.setUsername("xiaoming");
user.setAge(18);
model.addAttribute("myuser", user); // 屬性名應為"user"
return "user";
}
2. 視圖名稱錯誤
請確保視圖名稱正確,並且與Thymeleaf模板的文件名相匹配。
@RequestMapping("/user")
public String getUser(Model model) {
User user = new User();
user.setUsername("xiaoming");
user.setAge(18);
model.addAttribute("user", user);
return "user1"; // 視圖應該為"user.html"
}
3. 模型未正確傳遞給視圖
請確保在控制器返回View之前,已經正確地傳遞了Model。在下面的示例中,我們在返回視圖之前遺漏了傳遞Model。
@RequestMapping("/user")
public String getUser(Model model) {
User user = new User();
user.setUsername("xiaoming");
user.setAge(18);
model.addAttribute("user", user);
// 沒有傳遞Model
return "user";
}
在所有這些情況下,確保屬性名稱正確、視圖名稱正確、模型正確傳遞,並且在視圖中使用正確的屬性名稱。這將確保Thymeleaf能夠正確地檢測到Model值,並將其渲染到視圖中。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/245372.html