2011-07-19 10 views
13

Chcę, aby użytkownik wprowadził jedną lub więcej nazw do komponentów inputText JSF. Więc myślę o zarządzanym fasoli tak:Jak mapować wiele inputText do właściwości tablicy?

public class MyBean { 

    private String[] names; 

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

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

Ale jak mogę map komponenty inputText JSF do tej właściwości tablicy?

Odpowiedz

13

Najpierw należy zachować tablicę w konstrukcie komponentu bean (post). Na przykład.

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

Następnie można albo tylko do nich dostęp za pomocą zakodowanego na stałe indeksu

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

lub użytku <ui:repeat> z varStatus do nich dostęp za pomocą dynamicznego wskaźnika

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

Czy nie używać th e var atrybut jak

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

To nie będzie działać po przesłaniu formularza, ponieważ String nie posiada setter dla wartości (getter jest w zasadzie metoda toString()).

2

W ten sposób używam górnego przykładu.

<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> 
Powiązane problemy