我有一个包含多个组件的表单,其中一些有自己的验证和/或是强制性的。然后我还有几个selectOneMenu
组件在它们的列表中具有相同的三个selectItem
元素。我已经定义了三个commandButton
,以便为所有列表选择相同的值(commandButton
每个可能值一个)。
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"
到我的“全选”按钮,它可以工作,但它不会从模型更新视图,然后用户看不到值已经改变......所以它真的不起作用。
我想达到什么目标?我只想在最后一个按钮(提交)时执行验证。因此,我的用户可以使用这些“全选”按钮,而无需预先填写强制性组件。
我希望你能理解我的上下文。随时要求任何澄清。提前致谢。