2012-01-22 26 views
2

我想用struts迭代器從列表中寫入一些數據。學生是我定義的班級。 與值屬性一起使用時的s:屬性似乎根本不起作用。Struts2 Iterator屬性值(不工作)

我在JSP下面的代碼:

<s:iterator value="students" var="student"> 
    <h2><s:property /></h2> 
    <h2><s:property value="firstName" /></h2> 
    <h2><s:property value="student.firstName" /></h2> 
    <h2><s:property value="top.firstName" /></h2> 
    <h2><s:property value="[0].firstName" /></h2> 
    <h2><s:property value="#firstName" /></h2> 
</s:iterator> 

在第一個屬性標籤的作品。它打印Student對象的toString()。所有其他屬性標籤根本不打印任何內容。

Student類的toString()方法如下:

public String toString() { 
    return firstName + " " + lastName + " " + Integer.valueOf(age); 
} 

Student類具有的getFirstName()方法如下:

String getFirstName() { 
    return firstName; 
} 

我使用Struts 2.1.6
日誌文件中沒有例外。
查看html的源代碼時,我只看到空的h2標籤。
我想知道這裏有什麼問題。任何幫助表示讚賞。

+2

它應該是一個公開的方法。 –

+1

爲了使OGNL能夠訪問你的域對象屬性訪問器方法應該是公開的 –

回答

0

您的getFirstName()方法僅具有包級訪問權限。它應該是公開的,可以從JSP訪問。

將其更改爲

public String getFirstName()

和你設置。

+0

謝謝!這是我的一個愚蠢的錯誤:/ – arahant

+0

這不是愚蠢的。我有時候還是這樣做。這將是你從現在開始尋找的第一件事。 –

0

當你正在使用iterator標籤「var」屬性,你必須從對象參考價值一樣

<s:iterator value="students" var="student"> 
<h2><s:property value="#student.firstName" /></h2> 
</s:iterator> 

你可以寫相同的代碼,而無需使用var屬性像下面

<s:iterator value="students"> 
<h2><s:property value="firstName" /></h2> 
</s:iterator> 

兩者都會工作。