2015年9月18日 星期五

s標籤取值注意事項 (Struts2.3.x 六)

使用s標籤,必須增加<%@ taglib prefix="s" uri="/struts-tags" %>

※直接取得

在LoginAction.java增加以下程式碼測試
private String message;
public String getMessage() {
    return message;
}

@Override
public String execute() throws Exception {
    HttpServletRequest request = ServletActionContext.getRequest() ;
    
    this.message = "顯示";
    request.setAttribute("test", "test");
    
    return SUCCESS;
}

login.jsp
<s:property value="message"/>
${message}
<s:property value="test"/>
${test}
<s:property value="#request.test"/>

※s標籤必須在Action裡定義field才能取得到; 而EL都可以,不過聽說較早版本取不到field
※如果s標籤要取內置對象屬性,可以用#,因為它是用OGNL,而OGNL的語法就是#開頭
※如message是field,而test不是,所以第三行印不出來,必須改成第五行才可以

※在collections裡取得

LoginAction.java
public String execute() throws Exception {
    HttpServletRequest request = ServletActionContext.getRequest() ;
    
    List<User> list = new ArrayList<User>() ;
    for (int i = 0 ; i < 3 ; i ++) {
        User user = new User() ;
        user.setUserName("name" + i);
        user.setUserPassword("password" + i);
        list.add(user) ;
    }
    request.setAttribute("users", list);
    return SUCCESS;
}

login.jsp
<ul>
<s:if test="#request.users != null">
    <s:iterator value="#request.users">
        <li><s:property value="userName"/>
        <li><s:property value="userPassword"/>
        <li>${userName}
        <li>${userPassword}
    </s:iterator>
</s:if>
</ul>

※在迴圈裡,s標籤就不用#開頭了,而且用EL也可以

沒有留言:

張貼留言