Динамически добавленное поле ввода в пользовательском интерфейсе: повтор не обрабатывается при отправке формы - PullRequest
2 голосов
/ 26 ноября 2011

Я пытаюсь создать форму ввода для ответов в моем приложении, и я начинаю с четырех «пустых» ответов, для которых представление циклично повторяется и для которых создаются поля ввода. У меня есть кнопка «Добавить ответ», в которую я добавляю один вопрос к массиву ответов, а затем представление снова отображает ответы, но теперь с дополнительным полем ввода. Задний боб является видимым. Однако, если я отправляю форму без нажатия кнопки «Добавить ответ», все работает. Данные сохраняются в базе данных. Но если я добавлю ответ после того, как четверка заполнена, последний не получит данные из поля ввода (answer.description). Если я сначала нажму кнопку «Добавить ответ» (без заполнения каких-либо полей ввода), данные из полей не будут собраны вообще, а все 5 будут пустыми, поэтому в базе данных данные не будут сохранены.

У меня есть это в форме:

        <ui:repeat var="answer" value="#{bean.answers}">
            <div class="field">
                <h:outputLabel for="answerAlternative-#{answer.serialNumber}"
                    value="Svaralternativ #{answer.serialNumber}" />
                <h:inputText id="answerAlternative-#{answer.serialNumber}"
                    value="#{answer.description}" size="40" />
            </div>
        </ui:repeat>

Это метод для создания нового поля ввода:

public String addAnswer() {
    if (answers.size() + 1 < 6) {
        Answer answer = new Answer();
        answer.setSerialNumber(answerSerialNumber + "");
        answerSerialNumber++;
        answers.add(answer);
    }

    return null;
}

Используется для инициализации массива ответов четырьмя пустыми полями ввода:

@PostConstruct
public void initBean() {
    answers = new ArrayList<Answer>();

    for (int i = 0; i < 4; i++) {
        addAnswer();
    }
}

1 Ответ

5 голосов
/ 26 ноября 2011

Этот вид соответствует текущим проблемам <ui:repeat> в Мохарре. В Мохарре полностью сломано .

У вас есть в основном 2 варианта:

  • Замените Мохарру на MyFaces , которая имеет более стабильную реализацию <ui:repeat>.
  • Используйте компонент UIData вместо <ui:repeat>, например. <h:dataTable>, Томагавк <t:dataList>, PrimeFaces '<p:dataList> и т. Д.
...