当前位置: 首页 > 面试题库 >

PrimeFaces不渲染

葛浩阔
2023-03-14
问题内容

在我的Maven项目中,我创建了一个“
index.xhtml”文件。当我构建并运行该项目时,Web浏览器未显示任何内容。当我查看源代码时,仍然可以看到源代码,而不是普通的html标签

我尝试通过以下方式创建XHTML文件:

  1. 选择项目,右键单击New ..并选择Other ..并选择“ Web”类别,然后选择JSF Page。
  2. 选择项目,右键单击New ..,然后选择Other ..,然后选择“ JavaServer Faces”类别,然后选择JSF Page。
  3. 选择项目,右键单击New ..,然后选择Other ..,然后选择“ Other”类别,然后选择XHTML Page。

以上方法均无效。

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

<?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

<?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>

那是第一种情况。第二种情况是,我已经有一个可以在PrimeFaces上正常运行的NetBeans Web应用程序项目。“
index.html”确实呈现。但是,当我创建一个新的JSF页面并包含PrimeFaces命名空间时xmlns:p="http://primefaces.org/ui",该特定的JSF和其他新创建的JSF页面将无法呈现。

一定是我想念的东西,但我不知道是什么。

我的环境如下:

  • JDK6
  • Netbeans 7.1.2
  • PrimeFaces 3.3
  • 阿帕奇7.0.2
  • Windows 7(32位)

谢谢。


问题答案:

由于您/index.xhtml用作欢迎文件,因此您还应该将FacesServlet映射到该扩展名。

如果不需要现有的前缀映射,请替换为:

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

否则,只需添加*.xhtml模式即可,最终结果是:

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

请注意,您几乎总是希望在*.xhtml那里进行映射,以防止将Facelets的源代码公开。

更新:

关于.jsf和.xhtml之间的区别:

.jsf是默认映射之一(如果您在JSF
2.1中根本没有声明FacesServlet,那么您将获得它)。它源于磁盘上物理文件具有的扩展名(.jsp或.xhtml)与URL中使用的扩展名之间的区别。

不幸的是,这些在历史上是不同的,因为JSF是一种附加技术,必须通过单独的显式Servlet(Faces
Servlet)进行。纯JSP从来没有此限制,因为它是内置的。JSF页面最初只是在JSP中编写的,因此,如果您仅在URL请求中使用.jsp,则该容器将直接转到JSP并跳过Faces
Servlet。

因此,必须为此发明一种解决方法,那就是将Faces Servlet映射到*.jsf,然后Faces
Servlet将直接定向到JSP文件,该文件.jsp在磁盘上仍具有扩展名。

我个人认为*.xhtml*.xhtml映射简单是唯一可行的即开即用选项,但是由于向后兼容,JSF似乎无法再将其设置为默认选项。



 类似资料:
  • 我的程序出了什么问题?我觉得一切都很好。我的方法获取所选值“REFERENCE”,并将布尔值设置为showReference。但是,如果我在p:ajax中使用update=“targetPanel”,我的页面无法呈现。当我使用update=“entryForm”时,它可以渲染h:panelGroup。 我错过了什么? 我的页面。xhtml 关键因子值。Java语言 我的豆子。Java语言

  • 我使用primeface5.2。我想使用一个动态渲染选项卡的手风琴面板。我的xhtml代码: “existe”值存储在布尔值中,我的问题是它似乎从未在渲染属性中使用过。我得到了这个结果。tab rendered我尝试直接编写它,结果是一样的:选项卡总是呈现的。 你能帮帮我吗?

  • 我知道以前有人问过这个问题,但即使在仔细阅读了各种帖子,包括Balus的优秀答案“h:commandLink/h:commandButton未被调用”“侦听并调试JSF生命周期阶段”之后,我仍然无法理解为什么我不能在我的选项卡中呈现JSF页面。 我在CSS选项卡“规则”下有一个PrimeFaces选项卡“规则管理”,它成功地显示了以下Jsf文件RuleAdmin2。xhtml。在该页面中,我有一个

  • 我正在使用PrimeFaces 5并使用dataexport导出. xls和pdf文件。当我单击导出时,似乎什么都没有发生。下面是我的代码: dataTable和Export命令都在一个表单中。它类似于素数面上给出的示例。组织网站。但是,我无法将数据导出到pdf、cvs。

  • 本文向大家介绍primefaces 你好Primefaces,包括了primefaces 你好Primefaces的使用技巧和注意事项,需要的朋友参考一下 示例 这是一个带有primefaces的简单应用程序,它是一个登录页面: 1-配置web.xml: 2-创建ManagedBean: 3-创建* .xhtml页面: 4-部署您的应用程序。 5打开浏览器,然后键入: http://localho

  • 我正在尝试在对话框中设置panelgrid。除了科尔斯潘,一切似乎都在工作。我查过这个PrimeFaces panelGrid的帖子,但它有一年半的历史。从primefaces手册和showcase来看,colspan应该被datatable和PanelGrid接受。 但我找不到我做错了什么。