Jsf 2 在ui中动态添加的输入字段:表单提交期间不处理重复

Jsf 2 在ui中动态添加的输入字段:表单提交期间不处理重复,jsf-2,facelets,uirepeat,Jsf 2,Facelets,Uirepeat,我正在尝试为我的应用程序中的答案创建一个输入表单,我从四个“空”答案开始,视图将循环这些答案,并为其创建输入字段。我有一个添加答案按钮,我在答案数组中添加一个问题,然后视图再次呈现答案,但现在有一个额外的输入字段。支持bean是可视范围的。但是,如果我提交表格时没有按“添加答案”按钮,那么一切都会正常工作。数据保存在数据库中。但是,如果我在填写完四个答案后添加一个答案,那么最后一个答案不会从inputfield(answer.description)获取数据。如果我先按add answer(不填

我正在尝试为我的应用程序中的答案创建一个输入表单,我从四个“空”答案开始,视图将循环这些答案,并为其创建输入字段。我有一个添加答案按钮,我在答案数组中添加一个问题,然后视图再次呈现答案,但现在有一个额外的输入字段。支持bean是可视范围的。但是,如果我提交表格时没有按“添加答案”按钮,那么一切都会正常工作。数据保存在数据库中。但是,如果我在填写完四个答案后添加一个答案,那么最后一个答案不会从inputfield(answer.description)获取数据。如果我先按add answer(不填写任何输入字段),字段中的数据根本不会被捕获,所有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;
}
公共字符串addAnswer(){
如果(答案.size()+1<6){
答案=新答案();
答案。设置序列号(应答序列号+“”);
回答serialnumber++;
答案。添加(答案);
}
返回null;
}
用于初始化带有四个空输入字段的应答数组:

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

    for (int i = 0; i < 4; i++) {
        addAnswer();
    }
}
@PostConstruct
public-void initBean(){
answers=newarraylist();
对于(int i=0;i<4;i++){
addAnswer();
}
}

这种外观与Mojarra当前的
问题相匹配。它在莫哈拉

您基本上有两种选择:

  • 取代Mojara,通过它可以更稳定地实现
  • 使用
    UIData
    组件代替
    ,例如战斧、PrimeFaces等

什么JSF impl/版本?Mojarra在
和部分状态保存方面长期存在严重问题。其中大多数应在当前的2.1.4中固定。我的脸不应该有这种问题,你也可以试试。您也可以使用
来尝试它,以排除一个和另一个,在这种情况下,它应该不会有任何问题。我在哪里可以检查我使用的版本?它通常打印在webapp启动日志中。检查IDE控制台。对于Mojarra,它看起来像是
INFO:initialized Mojarra 2.1.4(SNAPSHOT 20111107)For context'/playerd'
。INFO:initialized Mojarra 2.1.3(FCS b02)For context。也许能解释为什么?我不这么认为。2.1.3-->2.1.4中没有关于
ui:repeat
和部分状态保存的任何修正。主要修复在flash范围和异常处理中。试试
或MyFaces。很抱歉,我的第一条评论模棱两可,我的意思是说,在当前版本之前,一些相关问题已经得到解决,而不仅仅是在2.1.4中。