JSF 2.1 validateBean всегда вызывается перед событием preRenderView - PullRequest
2 голосов
/ 13 января 2012

Я пытаюсь использовать динамические группы проверки

<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?Мне нужно, чтобы # {bean.validationGroup} вызывался после предварительного просмотра, потому что preRender загружает данные из БД, и validationGroups будут другими.Я использую Myfaces 2.1.5 с richfaces 4.1.

Ответы [ 2 ]

1 голос
/ 13 января 2012

Это действительно указанное поведение. Теги <f:xxx> выполняются во время построения представления. Если вы хотите инициализировать свойства до того, как представление будет построено, то вам нужно выполнить работу в (пост) методе конструктора компонента. Событие предварительного просмотра выполняется перед отображением представления, но задолго до его построения.

Удалите <f:event> в целом и используйте вместо него initView a @PostConstruct.

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

Он будет запущен сразу после построения bean-компонента и завершения всех инъекций зависимостей, таких как @ManagedProperty, @Inject, @EJB и так далее.

0 голосов
/ 15 января 2012
@ManagedBean
@XScoped --sessionScope,viewScope   
Public class Bean{
 public void initView(){
    if (!FacesContext.getCurrentInstance().isPostback(){
    //put initView codes here
    }
  }

}
...