Freemaker中判斷物件為空 ??與!的區別
阿新 • • 發佈:2018-12-26
UserEntity:
public class UserEntity{ /** * 使用者ID */ private String userId; /** * 賬號 */ private String account; /** * 密碼 */ private String password; /** * 角色 */ private Role role; public String getUserId() { return userId; } public void setUserId(String userId) { this.userId = userId == null ? null : userId.trim(); } public String getAccount() { return account; } public void setAccount(String account) { this.account = account == null ? null : account.trim(); } public String getPassword() { return password; } public void setPassword(String password) { this.password = password == null ? null : password.trim(); } public Role getRole() { return role; } public void setRole(Role role) { this.role = role; } }
在user物件中我們有個角色,那麼我們可以通過${user.role.rolename}獲取當前使用者的角色名稱
問題來了當role沒有賦值的時候,在jsp中${}表示式會直接忽略不顯示,而freemarker會報異常,還是一大堆,freemarker就需要手動去處理
這的role是null因此報錯了,而在freemarker中報的異常,排錯還挺難的,一大頓,這裡就需要我們手動去處理null,這裡就要用到!
${user.role! }
此刻的效果就跟jsp中的${}el表示式一樣了,如果為空就不顯示了,當在!後進行說明如:獲取當前使用者的角色:${user.role!"當前使用者沒有角色"}如果為空預設值就是後面的值
而當寫成這樣的時候:獲取當前使用者的角色:${user.role.rolename!} 而role任然沒值的時候依然會報錯,而正確的方式<br/>獲取當前使用者的角色:${(user.role.rolename)!}
?? 用於判斷是否為空(原意為是否存在)
<#if user.role??>
如果使用者有許可權角色...
<#else>
當前使用者沒有許可權角色
</#if>
${user.role???string}這裡將結果以字串的形式輸出:true 或者false
${user.role???string("YES","NO")} 這判定使用者許可權角色為空,不為空則返回YES,為空返回NO