3

我正在尝试使用 JSF 2.2、Netbeans 7.3 和 GlassFish v2 运行简单的应用程序。

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>
       <b>Hello from Facelets</b>
       <h:form id="this">
           <h:outputText value="This is"/>
       </h:form>
    </h:body>
</html>

web.xml

<web-app version="2.5" 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_2_5.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>/faces/*</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>faces/index.xhtml</welcome-file>
    </welcome-file-list>  
</web-app>

输出:


输出文件


<b>Hello from Facelets</b>正在工作但不<h:outputText value="this is "/>工作。这是如何引起的,我该如何解决?

我在这里搜索并发现以下问题:

但是,答案并没有解决我的问题。


更新:@Xtreme Biker,当我像你说的那样改变时,我得到了以下异常:

这是例外

注意:如果我使用它*.jsp而不是*.xhtml它的作品。但是当我制作我的index文件扩展名xhtml时它不起作用。

4

3 回答 3

4

更改您的 servlet 映射以使用.xhtml文件。它似乎还没有转换标签。

<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
于 2013-08-23T07:11:49.760 回答
3

您正在使用 GlassFish v2,它是一个古老的 Java EE 5 容器,已经捆绑了 JSF 1.2。默认情况下,webapp 提供的 JSF 被忽略,本质上,您一直在运行 JSF 1.2。这就解释了为什么 JSP 可以正常工作。仅自 JSF 2.0 起才支持 Facelets。

您有以下选项,具体取决于您的要求是能够使用 JSF 2.2 还是仅限于 GlassFish v2:

  1. 如果您受限于 GlassFish v2,那么您根本无法使用 JSF 2.2。JSF 2.2 至少需要 Java EE 6 (GlassFish 3)。但是,您可以使用 JSF 2.0 或 2.1。您可以从此处下载最新的 JSF 2.1 (当前为 2.1.25)。放入javax.faces.jar/WEB-INF/lib编辑/WEB-INF/sun-web.xml以将以下条目添加到<sun-web-app>

    <class-loader delegate="false"/> 
    <property name="useBundledJsf" value="true" />
    

    这基本上会指示 GlassFish 更喜欢 webapp 捆绑的 JSF,而不是自己捆绑的 JSF。


  2. 如果您不限于 GlassFish v2 并且可以对其进行升级,那么请尽快进行。GlassFish v2 是 2006 年 5 月的一个古老容器,并于 2009 年 12 月由 GlassFish 3 (Java EE 6) 继任,而 GlassFish 4 (Java EE 7) 在 2013 年 5 月又由 GlassFish 4 (Java EE 7) 继任。

    GlassFish 3.0 捆绑 JSF 2.0 和 GlassFish 3.1 捆绑 JSF 2.1。但两者都可以升级到 JSF 2.2,就像 GlassFish v2 一样,不同之处在于sun-web.xml已重命名为glassfish-web.xml. 另一种方法是简单地将GlassFish 目录中的jsf-api.jar+jsf-impl.jar或替换为所需的版本。javax.faces.jar/modules

    GlassFish 4.0 捆绑了 JSF 2.2,您无需手动提供任何 JAR。但是,我目前不建议使用 GlassFish 4.0。它太有问题了(就像 GlassFish 的每个第一个主要版本一样)。最好等待 4.0.1(如果它出现)或 4.1。


  3. 如果您受限于 GlassFish v2 并且无法以某种方式升级到 JSF 2.x,但您真的非常想使用 Facelets,那么您总是可以单独安装 Facelets 1.x。该过程在文档中进行了描述。然而,虽然您有使用 Facelets 而不是 JSP 的优势,但坚持使用 JSF 1.x 是不利的。我真的不建议这样做。

于 2013-08-23T10:54:43.413 回答
2

尝试替换这个,

xmlns:h="http://java.sun.com/jsf/html"

代替

 xmlns:h="http://xmlns.jcp.org/jsf/html"
于 2013-08-23T06:36:27.450 回答