1. 程式人生 > >Freemaker中判斷物件為空 ??與!的區別

Freemaker中判斷物件為空 ??與!的區別

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