PreRenderView постепенно вызывается при каждой обратной передаче

У меня проблема с порядком и количеством казней.f:event type="preRenderView"

Во время поиска я нашел, как обычно, ответы от BalusC вэтот а такжеэтот пост, связанный с моей проблемой - все же он оставляет мне два вопроса:

Когда я ставлю одинf:event type="preRenderView" в файле шаблона (для управления общими задачами, такими как проверки состояния пользователя, которые применяются ко всем моим представлениям) и другимf:event type="preRenderView" в каждом представлении (для обработки определенных инициализаций представления) мне интересно, почему метод слушателя из представления вызывается раньше, чем метод из шаблона.

Когда я ставлю весь послеui:define как предложено, он вызывается дважды после перенаправления на эту страницу со страницы входа в систему, но когда я ставлю его на один уровень выше послеui:composition он вызывается только один раз.

Обновление: пример

Следующий пример демонстрирует поведение выше:

Это файл шаблонаtemplate_test.xhtml, содержащий слушателя дляpreRenderViewсобытие, вызывающее общий метод в обработчике для всех представлений:





    


    
    
        
    


Это файл просмотраtest.xhtml, содержащий также слушателя дляpreRenderViewсобытие, вызывающее определенный метод представления в обработчике и перенаправление командной кнопки через метод обработчика:



    
        
            
        
        
            
        
    

Это класс обработчикаTestHandler.java содержащий 3 метода:

package test;

import java.io.Serializable;

import javax.enterprise.context.SessionScoped;
import javax.inject.Named;

@Named
@SessionScoped
public class TestHandler implements Serializable {

    private static final long serialVersionUID = -2785693292020668741L;

    public void initCommon() {
        System.out.println("Common init called.");
    }

    public void initIndividual() {
        System.out.println("Init for individual page called.");
    }

    public String redirect() {
        return "test/test.xhtml?faces-redirect=true";
    }
}

Вот что я вижу в своем журнале tomcat, когда запрашиваю тестовую страницу:

Init for individual page called.
Common init called.
Init for individual page called.

Это показывает нет. 1, что обработчик события из представления вызывается перед тем из шаблона и no. 2, обработчик события из представления вызывается дважды.

Это также показывает третью точкуПоэтому я включил кнопку с перенаправлением на ту же страницу), показывающую, что происходит, если страница запрашивается перенаправлением - отдельная страница вызывается еще больше раз:

Init for individual page called.
Common init called.
Init for individual page called.
Init for individual page called.

Оба нет. 2 и 3 можно предотвратить, поместив весь раздел метаданных надui:define или добавив фиктивный параметр в представлениеРаздел метаданных, который не включен в URL:


    
    

Может кто-нибудь сказать мне причину этих случаев?

Ответы на вопрос(2)

Ваш ответ на вопрос