我正在尝试制作一个非常简单的应用程序。使用起始菜单作为欢迎页面,但是我遇到了没有显示面部组件的问题。
我的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?
密切相关感谢您的帮助
答案 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>