在ui:repeat中动态添加的输入字段在表单提交期间不被处理



我试图在我的应用程序中的答案的输入表单,我开始与四个"空"的答案,视图循环并使输入字段。我有一个添加答案按钮,我将一个问题添加到答案数组,然后视图再次呈现答案,但现在有一个额外的输入字段。支持bean是可视的。然而,如果我提交的形式没有按下添加答案按钮,它都是有效的。数据保存在数据库中。但是,如果我在填写四个之后添加一个答案,则最后一个答案不会从inputfield (answer.description)中获取数据。如果我先按add答案(不填写任何输入字段),则根本不会捕获字段中的数据,所有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;
}

用于初始化带有四个空输入字段的answers数组:

@PostConstruct
public void initBean() {
    answers = new ArrayList<Answer>();
    for (int i = 0; i < 4; i++) {
        addAnswer();
    }
}

这个外观匹配Mojarra的<ui:repeat>当前的问题。在Mojarra,它完全被打破了。

你基本上有两个选择:

  • 用MyFaces代替Mojarra, MyFaces有更稳定的<ui:repeat>实现。
  • 使用UIData组件代替<ui:repeat>组件,例如<h:dataTable>,战斧的<t:dataList>, PrimeFaces的<p:dataList>

相关内容

  • 没有找到相关文章

最新更新