在preRenderView事件之前总是调用JSF 2.1 validateBean

时间:2012-01-13 15:36:09

标签: java jsf-2 richfaces

我试图使用动态验证组

<h:inputText id="id" value="#{bean.char}" maxlength="8" alt="#{bean.displayName}">
        <f:validateBean
                validationGroups="#{bean.validationGroup}" />
</h:inputText>

然而,#{bean.validationGroup}总是在

之前调用
<f:event type="preRenderView" listener="#{bean.initView}" />

这是Myfaces中的错误吗?我需要在prerenderview之后调用#{bean.validationGroup},因为preRender从db加载数据并且validationGroups将是不同的。我使用Myfaces 2.1.5和richfaces 4.1。

2 个答案:

答案 0 :(得分:1)

这确实是指定的行为。 <f:xxx>标记在视图构建期间运行。如果你想在构建视图之前初始化属性,那么你需要在bean的(post)构造函数方法中完成这项工作。预渲染视图事件在渲染视图之前运行,但在构建视图之后很久。

完全删除<f:event>并改为使用initView @PostConstruct方法。

@PostConstruct
public void initView() {
    // ...
}

它将在bean的构造和所有依赖注入完成后直接运行,如@ManagedProperty@Inject@EJB等。

答案 1 :(得分:0)

@ManagedBean
@XScoped --sessionScope,viewScope   
Public class Bean{
 public void initView(){
    if (!FacesContext.getCurrentInstance().isPostback(){
    //put initView codes here
    }
  }

}