2011-07-19 9 views
13

JSFのinputTextコンポーネントに1つ以上の名前を入力させたいと思います。 だから私はこのような管理対象Beanと思っています:複数のinputTextを配列プロパティにマップする方法はありますか?

public class MyBean { 

    private String[] names; 

    public String[] getNames() { 
     return names; 
    } 

    public void setNames(String[] names) { 
     this.names = names; 
    } 
} 

しかし、どのように私はこの配列プロパティにJSFののinputTextコンポーネントをマッピングしていますか?

答えて

13

まず、Beanの(ポスト)コンストラクタで配列を保持する必要があります。例えば。

public MyBean() { 
    names = new String[3]; 
} 

その後、あなたはいずれかだけで動的インデックス

<ui:repeat value="#{myBean.names}" varStatus="loop"> 
    <h:inputText value="#{myBean.names[loop.index]}" /> 
</ui:repeat> 

でそれらにアクセスするvarStatusにハードコードされたインデックス

<h:inputText value="#{myBean.names[0]}" /> 
<h:inputText value="#{myBean.names[1]}" /> 
<h:inputText value="#{myBean.names[2]}" /> 

または使用<ui:repeat>でそれらにアクセスすることができますではないを使用するフォームを送信する際Stringは値のセッターを持っていないため、電子var

<ui:repeat value="#{myBean.names}" var="name"> 
    <h:inputText value="#{name}" /> 
</ui:repeat> 

のような属性は、それは、動作しません(ゲッターは基本的にtoString()方法です)。

2

この例では、上の例を使用しています。

<c:forEach items="#{cotBean.form.conductor}" varStatus="numReg"> 
    <ice:panelGroup> 
     <ice:selectOneMenu value="#{cotBean.form.conductor[numReg.index].gender}"> 
     </ice:selectOneMenu> 
    </ice:panelGroup> 
    <ice:panelGroup> 
     <ice:selectOneMenu value="#{cotBean.form.conductor[numReg.index].dob.day}"> 
     </ice:selectOneMenu> 
     <ice:selectOneMenu value="#{cotBean.form.conductor[numReg.index].dob.month}"> 
     </ice:selectOneMenu> 
     <ice:selectOneMenu value="#{cotBean.form.conductor[numReg.index].dob.year}"> 
     </ice:selectOneMenu> 
    </ice:panelGroup> 
</c:forEach> 
関連する問題