我有一个h:form,其输入字段标记为必填字段。我想注册一个事件处理程序,它可以在检查是否满足"强制性"标准时采取行动(如果是:没有更改,如果否:将组件的背景涂成红色)。
我还没有弄清楚,哪个事件处理程序是为这个用例制作的。我已经试用了javax.faces.event.PreValidateEvent,如果这是一个验证问题,它应该可以完成这项工作。据我所知,在JSF生命周期中,当强制字段不符合其标准时,永远不会调用验证(因此会"立即"重新呈现视图)。
感谢您找到正确的选择!
我想注册一个事件处理程序,它可以在检查是否满足"强制性"标准时采取行动(如果是:没有更改,如果否:将组件的背景涂成红色)
不管使用什么转换/验证,只检查组件是否有效也可以吗?
<h:inputText value="#{bean.input}" required="true"
styleClass="#{component.valid ? 'none' : 'error'}" />
(输入组件内部的EL #{component}
引用指的是组件本身的UIInput
实例,这个类又有一个isValid()
方法,这就是它以这种方式工作的原因)
并按照定义CSS
input.error {
background: #fee;
}
如果没有,或者如果您想要一个更通用的解决方案(或者如果您使用的是不支持#{component}
的JSF 1.x),那么您也可以考虑使用PhaseListener
。你可以在这篇文章中找到一个例子。