我有一个包含多个组件的窗体,其中一些窗体有自己的验证和/或是必需的。然后,我也有几个selectOneMenu
组件在其列表中具有相同的三个selectItem
元素。我已经定义了三个commandButton
,以便为所有列表(每个可能值一个commandButton
)选择相同的值。JSF - 验证前从视图更新模型值
的JSF部
<table>
<tr>
<td>
<h:outputText value="ID:" />
</td>
<td>
<h:inputText value="#{MyClass.id}" id="inTxt_id" required="true">
<f:validator validatorId="CheckIDPattern" />
</h:inpuText>
<h:message for="inTxt_id" errorClass="error" />
</td>
</tr>
</table>
<table>
<tr>
<td>
<h:commandButton value="Select all opt1" action="#{MyClass.selectOpt1}" />
<h:commandButton value="Select all opt2" action="#{MyClass.selectOpt2}" />
<h:commandButton value="Select all opt3" action="#{MyClass.selectOpt3}" />
</td>
</tr>
<tr>
<td>
<h:outputText value="List 1:" />
</td>
<td>
<h:selectOneMenu value="#{MyClass.list1Val}">
<f:selectItems value="#{MyClass.listOfOptions}" />
</h:selectOneMenu>
</td>
<tr>
<td>
<h:outputText value="List 2:" />
</td>
<td>
<h:selectOneMenu value="#{MyClass.list2Val}">
<f:selectItems value="#{MyClass.listOfOptions}" />
</h:selectOneMenu>
</td>
</tr>
<tr>
//Many other selectOneMenu components...
</tr>
</table>
<h:commandButton action="#{MyClass.saveLists}" value="Submit" />
MyClass.java
public String selectOpt1(){
this.list1Val = 1;
this.list2Val = 1;
//...
return "";
}
//The same idea for selectOpt2 and selectOpt3.
在这种情况下,如果我的用户按下的我的 “全选” 按钮一个没有填充所述ID inputText
,它收到错误信息,但我不想要它,因为我想他们还没有完成填写表单。我只想在用户按下“保存列表”按钮时执行验证。
我试着将immediate="true"
添加到我的“全选”按钮中,它可以工作,但它不会更新模型中的视图,然后用户看不到值已经更改...所以它确实没有工作。
我想达到什么目的?我只想在最后一个按钮(提交)时执行验证。所以我的用户可以使用这些“全选”按钮,而不必填写以前的强制性组件。
我希望你能理解我的背景。随意要求澄清。 在此先感谢。
嗯...这个bean会话范围,但我正在** JSF 1.2 **(因为某些原因我已经无法迁移到JSF 2.0 :()。可这是解决方案适合我的JSF版本?谢谢! – jmrodrigg
好吧,这对JSF 1.x不起作用。一种选择是使用像RichFaces这样的库,因为这增加了ajax功能。我在过去使用它,它是一种易于入门查看我的编辑 – rbento
感谢您的回答,它肯定是我的错,我没有详细说明我使用的是什么技术,是的,我也使用RichFaces,我使用'a4j:support',但是我不能正确地解决问题,谢谢你的相关话题,我会研究它 – jmrodrigg