我开发了一个基于JSF的Web应用程序。我使用NetBeans IDE 8.0.1开发了这些应用程序,并且依赖于捆绑的Tomcat以及IDE,即Tomcat 8.0.9.0。
嗯,一切都很好。此外,当我在独立的Tomcat版本上尝试该项目时,一切都还可以。 当我将我的Web应用程序上传到在线Web服务器时,问题就出现了。
问题如下。请求网站URL时,一切正常,JSF标签正确呈现。但是,当尝试在浏览器的地址栏中请求特定页面(按其名称)时,没有显示任何内容(即,JSF标记未在请求的页面中呈现)。
当我查看生成的XHTML页面的源代码时,我发现JSF标签没有被解释 - 完全由Faces Servlet解释(即,JSF标签无法传输到它们的等效HTML标签)。在按名称请求页面时,Faces Servlet似乎无法理解甚至无法识别JSF标记。
这是我的(web.xml)文件:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.faces</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>index.xhtml</welcome-file>
</welcome-file-list>
</web-app>
这是我的演示(index.xhtml)页面:
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html">
<h:head>
<title>Facelet Title</title>
</h:head>
<h:body>
<h:outputFormat value="hello there" />
</h:body>
</html>
同样,问题发生在在线Tomcat 8版本中。键入:my-domain.com
时,index.xhtml中的JSF标记(默认页面)将在结果中呈现。
但是,当绑定my-domain.com/index.xhtml
时,回复中没有呈现任何内容。