JSF标记未呈现为HTML

时间:2010-02-05 13:53:18

标签: jsf netbeans java-ee glassfish

我正在使用 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>

此外:

8 个答案:

答案 0 :(得分:20)

如果没有解析JSF标记,那么它只是意味着请求尚未通过FacesServlet传递。那个servlet是负责所有JSF东西的人。您需要验证所使用的请求网址是否与url-pattern的{​​{1}}匹配。请注意,它区分大小写。

如果您在IDE的内置浏览器中直接打开文件,也可能会发生这种情况。你不应该这样做。您需要在内置浏览器或外部浏览器(例如MSIE / Firefox)的地址栏中自己指定正确的URL。

更新:还有一件事,您是否在FacesServlet attribtue中声明了JSF HTML taglib?您在代码段中省略了它。

应该看起来像

<html xmlns>

答案 1 :(得分:9)

web.xml中的以下代码

<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
</servlet-mapping>

而不是faces/*解决了我的非渲染jsf标记的问题。

注意:*.html会导致stackoverflow

答案 2 :(得分:0)

检查您的web.xml或faces-config.xml。有些东西显然不见了。

编辑: 我不知道jsf 2,但在我的jsf 1 faces-config.xml中我有这个:

<application>
   <view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
</application>

也许你应该看看这个。 (可能是一个提示,抱歉,我不能再帮助了)

编辑2:这不是答案,对不起

答案 3 :(得分:0)

我也遇到jsf tags的问题,根本没有渲染。我在web.xml中使用了欢迎文件login/entry.xhtml

当我将该文件更改为faces/login/entry.xhtml时,它运行良好。

必须归因于facesServeletnot intercepting页面。 它导致只显示简单的 html jsf 标签,只会被忽略。

答案 4 :(得分:0)

这可能与您无关,但在搜索类似问题的解决方案数小时后,我的罪魁祸首证明是WEB-INF / faces-config.xml中的此文件:

<?xml version="1.0"?>
<faces-config version="1.2" xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xi="http://www.w3.org/2001/XInclude"
 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_1_2.xsd"/>

由于一些奇怪的原因,JBoss Tools 3.3.0.M2将该文件放在我的JSF 2.0项目和BOOM中!什么都行不通。该文件看起来非常无辜(可能是由于版本=“1.2”),这让我非常沮丧。

我搜索了日志(没有!),WEB-INF / lib,类路径,甚至删除依赖项,结果证明是单个faces-config.xml :-P

希望这有助于某人...

答案 5 :(得分:0)

谢谢@ hendy-irawan

我通过更改了我的faces-config标头解决了我的问题

来自

<?xml version="1.0" encoding="UTF-8"?>

<faces-config
    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_1_2.xsd"
    version="1.2">

</faces-config>

<?xml version="1.0" encoding="UTF-8"?>

<faces-config
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd"
    version="2.2">

</faces-config>

答案 6 :(得分:-1)

已解决:将 web.xml 中的欢迎文件更改为以下内容解决了问题:

<welcome-file-list>
    <welcome-file>firstcup/greetings.xhtml</welcome-file>
</welcome-file-list>

答案 7 :(得分:-2)

我遇到了同样的问题。我从WEB-INF / lib中删除了一些richfaces jar,JSF现在正在使用。