2012-04-18 33 views
0

我無法迭代存儲在struts2中的用戶對象中的集合。如何迭代struts2中的對象集合?

我的Struts動作,形式和用戶豆類:現在

public class Project { 
    private String name; 
    private int id; 

    // getter and setter for name & id 
} 

public class User { 
    private String name; 
    private List<Project> projects; 
    : 
    : 
    public List<Project> getProjects() { 
     // fetch projects from database and add to projects 

     return projects; 
    } 
} 

pulbic class login extends ActionSupport { 
    private User user; 
    public String execute() { 
     user = new User(); 
     return SUCCESS; 
    } 

    public User getUser() { 
     return user; 
    } 
} 

,JSP頁面上,我需要顯示一個用戶的所有項目

JSP代碼:

<s:iterator value="user.projects" var="proj" status="key">   
     <td> <s:property value="${proj.name}" /> </td> 
     <td> <s:property value="${proj.id}" /> </td> 
    </s:iterator> 

但是這個迭代器不工作。我該怎麼做?

+0

當你說不工作,你應該解釋究竟發生了什麼 - 是否拋出異常,頁面是否顯示什麼等 – adarshr 2012-04-18 20:04:55

+0

它不顯示任何東西..... Struts2無法調用getUser( )和的user.getAlbums()方法。我不知道這個原因。 Struts 1.3支持的方法(getters)調用嵌套元素;像「user.albums」實際上會調用getUser()。getAlbums()。但它接縫strut2不支持這種訪問。 – Saumesh 2012-04-18 20:24:14

+0

@Saumesh當然它(技術上說OGNL)允許這種類型的訪問。你需要提供更多的細節以獲得任何有用的幫助。 – 2012-04-19 00:12:56

回答

1

var屬性的迭代器推動該項目到堆棧的頂部可能是不需要的...如果你想換用{}他們應該%前綴表達式

<s:iterator value="user.projects">   
    <td> <s:property value="name" /> </td> 
    <td> <s:property value="id" /> </td> 
</s:iterator> 

注意{}表示OGNL,其中$ {}表示EL。你只需要用%{}將struts2標籤中的表達式包裝起來,如果它們沒有被默認評估的話,因爲它通常在某些上下文中評估是有意義的,而不是其他標籤屬性評估的時候不需要經常做的事情。不像大多數人所期望的那樣。

+0

謝謝......它的工作! – Saumesh 2012-04-19 19:01:38

+0

如果問題解決了,請檢查此問題左側的綠色複選框。你也可以考慮訂閱struts2標籤,如果你是struts2的新手來閱讀這些問題和答案,那麼這很有教育意義。 – Quaternion 2012-04-20 00:03:47