JSF — проблема с @ViewScope

У меня есть страница, которая загружает (в группе панелей) две разные страницы из-за статуса входа в систему (зарегистрирована, не зарегистрирована). Это главный переключатель:

template.xhtml P.S. selector.page по умолчанию является «домашней страницей»

<h:panelGroup layout="block" styleClass="contenitore">
    <h:panelGroup layout="block">
        <h:panelGroup layout="block" styleClass="menu_table" id="login">
            <ui:insert name="login_homepage" />
        </h:panelGroup>

        <h:panelGroup layout="block" id="content">
            <c:catch>
                <ui:include src="/#{selector.page}/#{selector.page}.xhtml" />
            </c:catch>
        </h:panelGroup>
    </h:panelGroup>
</h:panelGroup>        

homepage.xhtml

<h:panelGroup rendered="#{!user.loggedIn}">
    <h:panelGroup layout="block" styleClass="content_title">
        Homepage
    </h:panelGroup>
</h:panelGroup>
<h:panelGroup rendered="#{user.loggedIn}">
    <ui:include src="/profile/profile.xhtml" />
</h:panelGroup>

login

<ui:define name="login_homepage">
    <h:form id="formLogin" prependId="false">
        <h:inputHidden value="#{selector.page}" id="page" />

        <h:panelGroup rendered="#{!user.loggedIn}">
            <h:outputScript name="jsf.js" library="javax.faces" target="head" />

            <h:outputLabel styleClass="menu_span" value="Username" />
            <h:inputText value="#{user.nickname}" id="nickname" />
            <h:outputLabel styleClass="menu_span" value="Password" />
            <h:inputSecret value="#{user.password}" id="password" />

            <h:outputLabel styleClass="menu_span">
                <h:commandButton value="Login" action="#{user.checkLogin}">
                    <f:ajax event="action" execute="nickname password page" render=":login :content err"/>
                </h:commandButton>
            </h:outputLabel>
        </h:panelGroup>

        <h:panelGroup rendered="#{user.loggedIn}">
            <h:outputLabel styleClass="menu_title" value="LOGGED" />
        </h:panelGroup>
    </h:form>
</ui:define>

profile.xhtml

<h:panelGroup layout="block" id="profileContent">
    <h:form id="formProfile">
        <h:outputScript name="jsf.js" library="javax.faces" target="head" />

        <h:panelGroup rendered="#{profileSelector.profilePage=='main'}">
            <ui:include src="/profile/profile_main.xhtml" />
        </h:panelGroup>

        <h:panelGroup rendered="#{profileSelector.profilePage=='edit' || profileSelector.profilePage=='editConfirm'}">
            <ui:include src="/profile/profile_edit.xhtml" />
        </h:panelGroup>
    </h:form>
</h:panelGroup>

ProfileSelector имеет область видимости @ViewScope. Когда я загружаю страницу и вхожу в систему, она инициализирует bean-компонент ProfileSelector. В противном случае, если я не вошел в систему и выполняю вход, он меняет содержимое с домашней страницы на профиль, но Bean не инициализируется. Итак, как я могу инициализировать этот компонент, когда я не зарегистрирован?

Я думаю, что приведенного выше кода достаточно, чтобы понять проблему.

Ваше здоровье


person markzzz    schedule 29.11.2010    source источник


Ответы (2)


  <c:catch>
                <ui:include src="/#{selector.page}/#{selector.page}.xhtml" />
            </c:catch>

Проблема в том, что вы используете элементы JSTL, которые нарушают альтернативу использования @ViewScope.

person Dejell    schedule 29.11.2010
comment
Итак, как я могу это исправить? Убрать улов? - person markzzz; 29.11.2010
comment
Проблема в том, что если пользователь добавит еще одну страницу, это может стать проблемой. Мне нужно добавить своего рода страницу проверки... - person markzzz; 30.11.2010
comment
Пытался. Это не решает мою проблему. На самом деле мне все еще нужно щелкнуть 2 раза на моих кнопках при первом входе в систему! - person markzzz; 30.11.2010

Похожая ошибка

http://java.net/jira/browse/JAVASERVERFACES_SPEC_PUBLIC-928

person Ali Ok    schedule 09.03.2011