【发布时间】:2012-12-18 21:39:46
【问题描述】:
我有一个h:selectOneListbox,它的属性为required="true"。使用a4j:ajax 进行客户端验证工作正常。
如果完成了有效的选择,则会呈现另一个面板组。
示例:
<h:selectOneListbox
....
id="first"
....
required="true"
>
<a4j:ajax event="valueChange" render="secondGroup" listener="#{myController.anotherMethodINeed}"/>
</h:selectOneListbox>
<!-- the other panel -->
<h:panelGroup id="secondGroup" layout="none">
<h:panelGroup id="secondGroupCheck" layout="none" rendered="#{not empty model.first}">
</h:panelGroup>
</h:panelGroup>
这也有效。
问题出在这里:
如果用户现在在第一个选择框上选择了非法值(如空的),则输入在客户端进行验证。因此,信息永远不会进入模型。在第一个有效输入之后,面板总是被渲染。没有办法让它再次消失,因为服务器不知道更改。
我知道的唯一解决方法是为此类字段制作自定义验证器。如果需要渲染面板,验证器会设置一个标志。然后可以使用此标志来决定是否应呈现面板组。
没有更聪明的方法吗?
我知道我可以使用rendered="#{not facesContext.validationFailed}" 之类的东西来检查所有字段,但我不知道只检查一个字段的方法。
【问题讨论】:
标签: ajax validation jsf-2