1 回答
TA贡献1841条经验 获得超3个赞
我已经复制了您的代码片段,并且来自消息的消息valIdNumber成功显示在消息控件中。唯一的区别是我将inputText组件的值设置为viewScope变量而不是托管 bean 字段并删除了该disabled属性,但这应该无关紧要。如果inputText没有输入值,该方法将不会触发,在这种情况下,只会validateRequired显示 的消息。您是否总是将println服务器控制台中的输出视为至少已触发该方法的证据?
更新:
发生这种情况是因为在您的情况下InvokeApplication,您的重定向(和保存!)完成的阶段无论如何都会执行,即使您的验证器失败。您应该明确告诉引擎您不想继续。
在返回之前,将以下行添加到您的验证方法中:
UIInput myInput = (UIInput)component;
myInput.setValid(false);
这些行应该在执行的同一个条件块中FacesContext.addMessage执行,即验证失败时。
ValidatorException另一种解决方案是当您的检查失败时抛出一个代替,它会自动将组件设置为无效,并告诉生命周期管理过程跳转到RenderResponse阶段、避免UpdateModel和InvokeApplication阶段。您还可以在ValidatorException构造函数中提供自定义消息,它将自动添加到FacesContext:
throw new javax.faces.validator.ValidatorException(
new FacesMessage("Invalid id for person provided")
);
添加回答
举报