我试图使用动态验证组
<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。
答案 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
}
}
}