Подтвердить что ты не робот

Как сопоставить множественный 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 с этим свойством массива?

4b9b3361

Ответ 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>