参见英文答案 >
JSF returns blank/unparsed page with plain/raw XHTML/XML/EL source instead of rendered HTML output1
我使用Netbeans和Glassfish跟随Java EE firstcup教程.
我使用Netbeans和Glassfish跟随Java EE firstcup教程.
当我执行JSF Web层时,我已经被指示编码,浏览器在.xhtml文件中获得与编码的相同的JSF标记,并且标签不会被渲染为HTML标签.我在浏览器中使用视图源代码知道这一点.
例如,对于这段代码:
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html"> <h:head> <title>Page title here</title> </h:head> <h:body> <h2> <h:outputText value="#{bundle.WelcomeMessage}" /> </h2> </h:body> </html>
浏览器应该是这样的:
<html ...> <head> <title>Page title here</title> </head> <body> <h2> the welcome message goes here </h2> </body> </html>
对?
那么我的浏览器正在获取jsf代码(上面的第一段代码),而不是HTML代码(上面的第二段代码).
它似乎是netbeans或glassfish的配置问题,但不知道什么.有任何想法吗?
这是我的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"> <context-param> <param-name>javax.faces.PROJECT_STAGE</param-name> <param-value>Development</param-value> </context-param> <servlet> <servlet-name>Faces Servlet</servlet-name> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>/firstcup/*</url-pattern> </servlet-mapping> <session-config> <session-timeout> 30 </session-timeout> </session-config> <welcome-file-list> <welcome-file>greetings.xhtml</welcome-file> </welcome-file-list> </web-app>
这是我的faces-config.xml文件:
<?xml version='1.0' encoding='UTF-8'?> <!-- =========== FULL CONFIGURATION FILE ================================== --> <faces-config version="2.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-facesconfig_2_0.xsd"> <application> <resource-bundle> <base-name>firstcup.web.WebMessages</base-name> <var>bundle</var> </resource-bundle> <locale-config> <default-locale>en</default-locale> <supported-locale>es</supported-locale> </locale-config> </application> <navigation-rule> <from-view-id>/greetings.xhtml</from-view-id> <navigation-case> <from-outcome>success</from-outcome> <to-view-id>/response.xhtml</to-view-id> </navigation-case> </navigation-rule> </faces-config>
此外:
>我在浏览器中输入的URL是http://localhost:8081/firstcup/,但我也试过:http://localhost:8081/firstcup/greetings.xhtml
>我检查过Glassfish日志,没有关于无法加载FacesServlet的信息
解决方法
如果JSF标签没有被解析,那么这只是意味着请求没有通过FacesServlet传递.那个servlet是对所有JSF的东西负责的.您需要验证所使用的请求URL是否匹配FacesServlet的url模式.请注意,区分大小写.
如果您直接在IDE的内置浏览器中打开文件,也可能会发生这种情况.你不应该这样做您需要在内置浏览器或外部浏览器(例如MSIE / Firefox)的地址栏中自行指定正确的URL.
更新:还有一件事,你是否在< html xmlns>中声明JSF HTML taglib? attribtue?你在你的代码片段中省略了.
应该看起来像
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html">