简体   繁体   English

PrimeFaces不渲染

[英]PrimeFaces Not Rendering

In my maven project, I created an "index.xhtml" file. 在我的maven项目中,我创建了一个“index.xhtml”文件。 When I built and ran the project, the web browser didn't show anything. 当我构建并运行项目时,Web浏览器没有显示任何内容。 When I view source, I could still see the source code, instead of the normal html tags. 当我查看源代码时,我仍然可以看到源代码,而不是普通的html标记。

I have tried creating the XHTML file by: 我试过通过以下方式创建XHTML文件:

  1. Selecting the project, right-click New.. and select Other.. and select "Web" category and then JSF Page. 选择项目,右键单击New ..并选择Other ..并选择“Web”类别,然后选择JSF Page。
  2. Selecting the project, right-click New.. and select Other.. and select "JavaServer Faces" category and then JSF Page. 选择项目,右键单击New ..并选择Other ..并选择“JavaServer Faces”类别,然后选择JSF Page。
  3. Selecting the project, right-click New.. and select Other.. and select "Other" category and then XHTML Page. 选择项目,右键单击New ..并选择Other ..并选择“Other”类别,然后选择XHTML Page。

None of the methods above worked. 上述方法均无效。

Maven POM Maven POM

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>ProfitV10</groupId>
<artifactId>ProfitV10</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>

<name>ProfitV10</name>

<properties>
    <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<dependencies>
    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-web-api</artifactId>
        <version>6.0</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.primefaces</groupId>
        <artifactId>primefaces</artifactId>
        <version>3.3.1</version>
    </dependency>
</dependencies>

<repositories>
    <repository>
        <id>prime-repo</id>
        <name>PrimeFaces Maven Repository</name>
        <url>http://repository.primefaces.org</url>
        <layout>default</layout>
    </repository>
</repositories>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.3.2</version>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
                <compilerArguments>
                    <endorseddirs>${endorsed.dir}</endorseddirs>
                </compilerArguments>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.1.1</version>
            <configuration>
                <failOnMissingWebXml>false</failOnMissingWebXml>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>2.1</version>
            <executions>
                <execution>
                    <phase>validate</phase>
                    <goals>
                        <goal>copy</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>${endorsed.dir}</outputDirectory>
                        <silent>true</silent>
                        <artifactItems>
                            <artifactItem>
                                <groupId>javax</groupId>
                                <artifactId>javaee-endorsed-api</artifactId>
                                <version>6.0</version>
                                <type>jar</type>
                            </artifactItem>
                        </artifactItems>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

web.xml 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>/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>

index.xhtml 的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://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.org/ui">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
        <p:spinner />
    </h:body>
</html>

That's the first scenario. 这是第一种情况。 The second scenario, I already have a NetBeans Web Application project running ok with PrimeFaces. 第二种情况,我已经有了一个运行PrimeFaces的NetBeans Web应用程序项目。 The "index.html" did render. “index.html”确实呈现了。 But when I created a new JSF page and included the PrimeFaces namespace, xmlns:p="http://primefaces.org/ui" , But this particular JSF and other newly created JSF page won't render. 但是当我创建一个新的JSF页面并包含PrimeFaces命名空间时, xmlns:p="http://primefaces.org/ui" ,但是这个特殊的JSF和其他新创建的JSF页面将不会呈现。

Must be something which I am missing, but I do not know what. 一定是我想念的东西,但我不知道是什么。

My environment is as below: 我的环境如下:

  • JDK6 JDK6
  • Netbeans 7.1.2 Netbeans 7.1.2
  • PrimeFaces 3.3 PrimeFaces 3.3
  • Apache 7.0.2 Apache 7.0.2
  • Windows 7 (32-bit) Windows 7(32位)

Thanks. 谢谢。

Since you're using /index.xhtml as the welcome file, you should also have mapped the FacesServlet to that extension. 由于您使用/index.xhtml作为欢迎文件,因此您还应该将FacesServlet映射到该扩展名。

If you don't need the existing prefix mapping, replace that by: 如果您不需要现有的前缀映射,请将其替换为:

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

Otherwise just add the *.xhtml pattern meaning you'll end up with: 否则只需添加*.xhtml模式,这意味着您将最终得到:

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

Note that you nearly always want the *.xhtml mapping there in order to prevent exposing the source code of your Facelets to the public. 请注意,您几乎总是希望在那里使用*.xhtml映射,以防止将Facelets的源代码暴露给公众。

Update: 更新:

About the difference between .jsf and .xhtml: 关于.jsf和.xhtml之间的区别:

.jsf is one of the default mappings (if you don't declare the FacesServlet at all in JSF 2.1, you'll get this among others). .jsf是默认映射之一(如果你没有在JSF 2.1中声明FacesServlet,你会得到这个)。 It stems from the difference between the extension the physical file on disk has (.jsp or .xhtml) and the extension used in the URL. 它源于磁盘上物理文件的扩展名(.jsp或.xhtml)与URL中使用的扩展名之间的差异。

Unfortunately these were historically different since JSF was a kind of add-on technique that had to go via a separate explicit Servlet (the Faces Servlet).Pure JSP never had this limitation since it was more build-in. 不幸的是,这些在历史上是不同的,因为JSF是一种附加技术,必须通过一个单独的显式Servlet(Faces Servlet)。纯JSP从来没有这个限制,因为它更多的内置。 JSF pages were authored only in JSP at first, so if you just used .jsp in your URL requests, the container would go directly to JSP and skip the Faces Servlet. JSF页面最初只在JSP中创作,因此如果您在URL请求中使用了.jsp,则容器将直接转到JSP并跳过Faces Servlet。

So a workaround had to be invented for this, and that was to map the Faces Servlet to *.jsf , and then the Faces Servlet would direct to the JSP file, which still had the extension .jsp on disk. 因此,必须为此发明一种解决方法,即将Faces Servlet映射到*.jsf ,然后Faces Servlet将指向JSP文件,该文件仍然在磁盘上具有扩展名.jsp

Personally I think a simple *.xhtml to *.xhtml mapping is the only sane out-of-the-box option, but due to backwards compatibility it seems JSF can not set this as a default anymore. 我个人认为一个简单的*.xhtml*.xhtml映射是唯一理智的开箱即用选项,但由于向后兼容性,似乎JSF不能再将其设置为默认值。

尝试将primefaces.jar文件放在WebContent / WEB-INF / lib下,然后将此jar添加到构建路径

Add another servlet-mapping: 添加另一个servlet映射:

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

After that use the following Url: http://[HOST]:[PORT]/[WEBAPP]/faces/index. 之后使用以下URL: http:// [HOST]:[PORT] / [WEBAPP] / faces / index。 jsf (. jsf and NOT .xhtml). jsf.jsf和NOT .xhtml)。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM