2013-04-26 3 views
1

У меня странное поведение: мой метод, аннотированный @PostConstruct, вызывается дважды.Метод JSF 2 @PostConstruct называется дважды

Отладка, я увидел, что моя поисковая страница назвала ее до того, как была вызвана действительность команды меток mbean.edit. Мой фасоль MBeanSearch - это запрос с областью действия, мой MBean - это вид области.

мой взгляд search.xhtml:

<h:commandLink value="#{var.value}" action="#{mbean.edit}"> 
    <f:param name="id" value="#{var.id}"/> 
</h:commandLink> 

Я также получил целевой вид var.xhtml.

Соответствующий экстракт из моего MBean боба:

public String edit() { 
     return "/pages/var.xhtml"; 
    } 

    @PostConstruct 
    public void initialize() { } 

С помощью этого кода, мой @PostConstruct вызывается после того, как мой метод редактирования, а затем он снова вызывается.

Я думаю, что я использую @PostConstruct неправильным способом (я думаю, MBean должен быть до любого метода). Но какова альтернатива для редактирования объекта на странице, отличной от страницы поиска?

+0

Нам нужна дополнительная информация для отслеживания проблемы. Как и объяснение Мичи является наиболее вероятным. – skuntsel

ответ

0

Проблема, кажется, что вид контекстного управляемым компонент mbean (я думаю, это немного неясно) используются в search.xhtml и var.xhtml.

Когда вы вызываете метод действия, вы все еще находитесь на виду search.xhtml. Вы получаете экземпляр компонента, связанный с просмотром области для этого представления и первым вызовом метода @PostConstruct.

Метод действия возвращает идентификатор вида второй страницы var.xhtml и JSF переходит на эту страницу. Если вы используете mbean на этой странице, вы получите новый экземпляр компонента при изменении представления. Это объясняет второй вызов метода @PostConstruct.

Смежные вопросы