2017-06-20 22 views
1

私はJSPを初めて使用しています。私は従業員情報のプロパティを持つEmployer BeanオブジェクトのListを持っています。 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が空/ nullでないかどうかをチェックして、支柱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

ものの数で後

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

ファイルへの最初の直接コメントに記載されているように、あなたの質問に答えてくださいあなたはあなたのリストを反復処理する必要があります。

<!-- 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でチェッククレイジーヌルを回避するためだけの努力で、どのような方法で答えには重要ではない)はnullチェックを減らすために...

コンストラクタをEmployeeInfoに配置し、意味をなさないのでnullの設定を許可しないでください。構築中にデータ構造を初期化します(静的初期化は正常です)。その後、getterを使用してコンテナを取得し、リスト/セットに追加します。その後、nullをチェックする必要はありません。あなたはコンテナ(set、list、何でも)のセッターを残しておくことができますが、おそらく、何か近いもの(同じパッケージ内にあるべきで、値を直接追加できなければなりません。他の遠く離れたものはビジネスを持たず、パブリックゲッターと仕事をする)。

あなたは、これはあなたがすべてのそれらのイテレータとプロパティへのアクセスにもしてラップすることができますしたくない場合は、次も

<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>が来ますあなたの救助に。

関連する問題