我的输入字段<f:ajax>附有一个对象,可以通过按TAB进行验证:
<h:inputText id="input2" value="#{bean.property}">
<f:validator validatorId="customValidator" />
<f:ajax execute="@form" render="@this" />
</h:inputText>
Run Code Online (Sandbox Code Playgroud)
如果存在任何验证错误,它们将通过类似的自定义组件显示<h:messages>,输入框将通过自定义设置样式PhaseListener.
我已经实现了一个自定义Faces Validator来跳过验证:
public class CustomValidator {
public void validate(FacesContext context, UIComponent component,
Object value) throws ValidatorException {
if (skipValidation(context)) {
return;
}
//Validation code goes here
}
Run Code Online (Sandbox Code Playgroud)
这使我可以根据某些条件跳过bean验证,例如切换到另一个编辑器视图并在支持bean中保存(可能是错误的)数据.
现在,刷新当前页面时出现问题(通过按F5,点击导航栏中的相同链接或类似链接).支持中明显错误的数据按预期正确显示,但也应标记为无效.因此,我需要一种方法来在每个页面加载时调用验证(目前它<f:ajax>仅通过对象调用).
我试着摆弄这样的东西
<f:ajax event="load" execute="editform" render="editform"/>
Run Code Online (Sandbox Code Playgroud)
附属于<h:body>.这是有效的,但网站被绘制了两次 - 如果由于页面首先被绘制而没有邪恶的闪烁,我将不会真正关心,然后通过ajax请求进行验证和更新.
我已经搜索了几个小时来解决这个问题,也许我只是在错误的方向搜索.对于如何解决这个问题,有任何的建议吗?