当我在ViewExpiredException之后重定向时,为什么登录页面中的字段会消失?

时间:2014-09-19 16:41:19

标签: jsf jsf-2 viewexpiredexception

我将以下行添加到web.xml

<session-config>
    <session-timeout>1</session-timeout>
</session-config>

<error-page>
    <exception-type>javax.faces.application.ViewExpiredException</exception-type>
    <location>/login/login.xhtml</location>
</error-page>

在会话过期时重定向到登录页面,它实际上是重定向但是字段名称和密码以及“fazer login”按钮消失了: enter image description here enter image description here

下面是登录页面中的相关代码:

<div class="conteudo">
    <div class="icone-produto"></div>
    <div class="coluna-direita">
        <div class="logo-produto" alt="Wplex-EP"></div>
        <div class="card signin-card">

            <h:panelGrid columns="1">

                <h:dataTable value="#{funcionarioController.lista}"
                    rendered="false"></h:dataTable>
                <h:dataTable value="#{escalaController.lista}" rendered="false"></h:dataTable>
                <h:dataTable value="#{indisponibilidadeController.lista}"
                    rendered="false"></h:dataTable>
                <h:dataTable value="#{programacoesController.programacoes}"
                    rendered="false"></h:dataTable>
                <h:dataTable value="#{funcionarioController.lista}"
                    rendered="false"></h:dataTable>

                <h:inputText class="texto" placeholder="Usuário" 
                    value="#{loginController.login}" />
                <h:inputSecret class="texto" placeholder="Senha" 
                    value="#{loginController.senha}"/>

                <h:commandLink id="fazerLoginId" action="#{loginController.isLoginOk}"
                    styleClass="btn btn-wplex mouseon">
                    Fazer Login
                </h:commandLink>

            </h:panelGrid>
        </div>
    </div>
</div>

1 个答案:

答案 0 :(得分:3)

消失的元素实际上是所有JSF组件。这部分,

<location>/login/login.xhtml</location>

必须与同一<url-pattern>中的FacesServlet条目的web.xml匹配才能使其解析XHTML并将JSF组件呈现为HTML。显然你在*.xhtml上没有任何人。也许是*.jsf/faces/*。您需要相应地更改<location>以匹配<url-pattern>的{​​{1}},以便调用它。例如。如果是FacesServlet

*.jsf

另一种方法是只使用<location>/login/login.jsf</location> <url-pattern>,这样您就不需要弄乱虚拟网址并与之混淆。

*.xhtml

另见: