【发布时间】:2014-07-12 23:01:48
【问题描述】:
我的输入字段附加了一个 <f:ajax> 对象,以便通过按 TAB 进行验证:
<h:inputText id="input2" value="#{bean.property}">
<f:validator validatorId="customValidator" />
<f:ajax execute="@form" render="@this" />
</h:inputText>
如果有任何验证错误,它们将通过类似于<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
}
这使我可以选择根据某些条件跳过 bean 验证,例如切换到另一个编辑器视图并将(可能是错误的)数据保存在支持 bean 中。
现在,刷新当前页面时出现我的问题(通过按 F5,点击导航栏中的相同链接或类似链接)。支持中明显错误的数据按预期正确显示,但也应标记为无效。因此,我需要一种在每次页面加载时调用验证的方法(目前它仅通过 <f:ajax> 对象调用)。
我试着摆弄这样的东西
<f:ajax event="load" execute="editform" render="editform"/>
附加到<h:body>。这行得通,但是该站点被绘制了两次-如果首先绘制页面,然后通过ajax请求进行验证和更新,是否没有邪恶的闪烁,我真的不在乎。
我已经搜索了几个小时来解决这个问题,也许我只是在错误的方向上搜索。有关如何解决此问题的任何建议?
【问题讨论】:
-
等待.. bean 是会话范围的??
-
嗨@BalusC,很抱歉我的回复迟了。是的,bean(嗯,不是直接的 bean,而是持有 bean 的对象,我从中引用 bean)是
@SessionScoped以在整个会话中保留 bean,而不仅仅是请求。那是问题吗?如果您愿意,我可以添加有关确切用例的更多信息。为什么我会这样做。