面部组件未显示

时间:2011-06-14 21:56:09

标签: java jsf-2

我正在尝试制作一个非常简单的应用程序。使用起始菜单作为欢迎页面,但是我遇到了没有显示面部组件的问题。

我的web.xml的相关片段

<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
<session-config>
    <session-timeout>
        30
    </session-timeout>
</session-config>
<welcome-file-list>
    <welcome-file>menu.xhtml</welcome-file>
</welcome-file-list>
<filter>
    <filter-name>WelcomeFileFilter</filter-name>
    <filter-class>giu.WelcomeFileFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>WelcomeFileFilter</filter-name>
    <url-pattern>/menu.xhtml</url-pattern>
</filter-mapping>

我的menu.xhtml文件

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
            xmlns:h="http://java.sun.com/jsf/html"
            xmlns:ui="http://java.sun.com/jsf/facelets"
            xmlns:p="http://primefaces.prime.com.tr/ui"
            xmlns:f="http://java.sun.com/jsf/core">
<h:form id="menuForm">
    <h1><h:outputText id="menuTitle" value="Menu Principal"/></h1><br/><br/>
    <h3><h:outputText id="patientsTitle" value="Pacientes"/></h3><br/>
    <h:panelGrid id="patientsGrid" columns="2">
        <h:outputText value="Consultar, Crear, Editar o Eliminar Paciente"/>
        <p:commandButton id="goToPatientsButton" value="Ir"/>
    </h:panelGrid><br/><br/>
    <h3><h:outputText id="doctorsTitle" value="Medicos"/></h3><br/>
    <h:panelGrid id="doctorsGrid" columns="2">
        <h:outputText value="Consultar, Crear, Editar o Eliminar Medicos"/>
        <p:commandButton id="goToDoctorsButton" value="Ir"/>
    </h:panelGrid><br/><br/>
    <h3><h:outputText id="medicalHistoryTitle" value="Historias Medicas"/></h3><br/>
    <h:panelGrid id="medicalHistoryGrid" columns="2">
        <h:outputText value="Consultar, Crear, Editar o Eliminar Historias Medicas"/>
        <p:commandButton id="goToMedicalHistoriesButton" value="Ir"/>
    </h:panelGrid>
    <p:dataTable emptyMessage="Vacio" paginator="true"/>
</h:form>

我不知道我做错了什么,普通的html组件(如文本和按钮)显示正确,但是数据表和消息等主要组件未显示。

如果它适用于任何事情,我的问题与:How to set 'JSF2 welcome-file' with faces servlet mapping?

密切相关

感谢您的帮助

1 个答案:

答案 0 :(得分:2)

<welcome-file>不能是“虚拟”网址。将其定义为menu.xhtml并创建Filter,映射到/menu.xhtml并重定向到正确的网址。

@WebFilter(urlPatterns={"/menu.xhtml"})
public class WelcomeFileFilter implements Filter {

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
        ((HttpServletResponse) response).sendRedirect("faces/menu.xhtml");
    }

    // ...
}

甚至更好,你也可以考虑完全摆脱/faces/*前缀映射,转而使用扩展映射。我建议使用*.xhtml,这样您就不必担心URL,也不需要担心当最终用户希望编辑URL以删除JSF映射时,JSF源代码会暴露的风险。

<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
<welcome-file-list>
    <welcome-file>menu.xhtml</welcome-file>
</welcome-file-list>