Как сопоставить множественный inputText с массивом?
Я хочу, чтобы пользователь вводил одно или несколько имен в компоненты JTF inputText.
Поэтому я думаю об управляемом bean следующем:
public class MyBean {
private String[] names;
public String[] getNames() {
return names;
}
public void setNames(String[] names) {
this.names = names;
}
}
Но как мне сопоставить компоненты JTF inputText с этим свойством массива?
Ответы
Ответ 1
Сначала вам нужно сохранить массив в конструкторе bean (post). Например.
public MyBean() {
names = new String[3];
}
Затем вы можете либо просто получить к ним доступ по индексу hardcoded
<h:inputText value="#{myBean.names[0]}" />
<h:inputText value="#{myBean.names[1]}" />
<h:inputText value="#{myBean.names[2]}" />
или используйте <ui:repeat>
с varStatus
для доступа к ним с помощью динамического индекса
<ui:repeat value="#{myBean.names}" varStatus="loop">
<h:inputText value="#{myBean.names[loop.index]}" />
</ui:repeat>
Do не использовать атрибут var
, например
<ui:repeat value="#{myBean.names}" var="name">
<h:inputText value="#{name}" />
</ui:repeat>
Он не будет работать, когда вы отправите форму, потому что String
не имеет сеттера для значения (getter - это в основном метод 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>