Jsf 2 在ui中动态添加的输入字段:表单提交期间不处理重复
我正在尝试为我的应用程序中的答案创建一个输入表单,我从四个“空”答案开始,视图将循环这些答案,并为其创建输入字段。我有一个添加答案按钮,我在答案数组中添加一个问题,然后视图再次呈现答案,但现在有一个额外的输入字段。支持bean是可视范围的。但是,如果我提交表格时没有按“添加答案”按钮,那么一切都会正常工作。数据保存在数据库中。但是,如果我在填写完四个答案后添加一个答案,那么最后一个答案不会从inputfield(answer.description)获取数据。如果我先按add answer(不填写任何输入字段),字段中的数据根本不会被捕获,所有5个字段都为空,因此数据库中不会保存任何数据 我有以下表格:Jsf 2 在ui中动态添加的输入字段:表单提交期间不处理重复,jsf-2,facelets,uirepeat,Jsf 2,Facelets,Uirepeat,我正在尝试为我的应用程序中的答案创建一个输入表单,我从四个“空”答案开始,视图将循环这些答案,并为其创建输入字段。我有一个添加答案按钮,我在答案数组中添加一个问题,然后视图再次呈现答案,但现在有一个额外的输入字段。支持bean是可视范围的。但是,如果我提交表格时没有按“添加答案”按钮,那么一切都会正常工作。数据保存在数据库中。但是,如果我在填写完四个答案后添加一个答案,那么最后一个答案不会从inputfield(answer.description)获取数据。如果我先按add answer(不填
<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等
和部分状态保存方面长期存在严重问题。其中大多数应在当前的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中。