2017-06-20 66 views
1

我是JSP新手。我有一個Employer bean對象列表,它具有Employee信息的屬性。使用struts標籤在JSP中迭代HashSet

List<Employer> employerList; 

    class Employer{ 
     private Set<EmployeeInfo> employeeInfo; 

     public Set<EmployeeInfo> getEmployeeInfo() { 
     return employeeInfo; 
     } 

    public void setEmployeeInfo(Set<EmployeeInfo> employeeInfo) { 
     this.employeeInfo= employeeInfo; 
    } 
    } 

class EmployeeInfo{ 
     private String name; 

     public setName(String name){ 
     this.name=name; 
     } 

     public getName(){ 
      return name; 
     } 
} 

我想檢查employeeSetInfo不爲空/空,然後用struts 2標籤在JSP顯示每個員工的名字。

<s:if test="%{employerList.employeeInfo.size>0}"> 
    <s:iterator value="employerList.employeeInfo" var="employee"> 
     <s:property value="#employee.name" /> 
    </s:iterator> 
</s:if> 

但是,它不工作。

+0

employerList是我相信的僱主名單。 – want2learn

+1

您的'employerList'是一個列表。你需要迭代它。嘗試在java類中編寫該代碼,然後在JSP中執行相同的操作。 –

回答

1

有幾件事,第一,直接回答你的問題,正如評論中提到的那樣您需要遍歷列表:

<!-- the "test" attribute is evaluated by default so we don't need to wrap it with 
%{}, also note that you are not testing for null so this isn't safe, your code 
should be modified to prevent nulls, where reasonable. For this reason the 
if can be omitted--> 

<s:iterator value="employerList"> <!-- will push each Employer's attributes to the top of the stack exposing its values --> 
    <s:iterator value="employeeInfo"> <!-- same at other iterator --> 
     <s:property value="name"/> 
    </s:iterator> 
</s:iterator> 

現在,以減少空檢查(這只是爲了避免瘋狂空的JSP檢查的努力,而不是答案的關鍵以任何方式)...

將一個構造函數放入EmployeeInfo中,並且不允許設置null,因爲它沒有意義。在構造過程中初始化數據結構(靜態初始化很好)。然後使用getter獲取容器並添加到列表/集合中。那麼就不需要檢查null了。你仍然可以讓容器的setter(set,list,什麼),但也許使它保護,以提醒你只有一些關閉(應該在同一個包中應該能夠直接添加值,並希望不知道分配null和其他遙遠的事情沒有業務,只能與公共獲得者一起工作)。

如果你不想這樣做你可以用所有的迭代器和屬性訪問以及與:

<s:if test="something != null"> 
    <!-- Do stuff with verified to be safe reference --> 
</s:if> 
<s:else> 
    <!-- maybe state there are no values so you aren't left wondering --> 
</s:else> 

您還可以在不遵循這一建議(這經常發生)Optional<T>來以幫助你。

0

使用fn:長度函數。在JSP的開頭

申報FN空間文件

<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> 

在後面的代碼

${fn:length(your_collection)} 

https://stackoverflow.com/a/26962901/4525175

Source

+0

OP問題中的'your_collection'是什麼? –

+0

這是你想要循環的列表。 – Elmehdi93