我正在尝试在我的JSF应用程序中利用PrimeFaces 5.1。该应用程序部署为EAR文件,包含1个WAR模块和多个EJB模块。整个事情是使用Maven构建的,并部署在Wildfly 8.1上。
我在我的根级别pom.xml中包含了PrimeFaces依赖项,如下所示:
<dependency>
<groupId>org.primefaces</groupId>
<artifactId>primefaces</artifactId>
<version>${version.primefaces}</version>
</dependency>
...在我的WAR pom.xml中,我已经将它声明为依赖:
<dependency>
<groupId>org.primefaces</groupId>
<artifactId>primefaces</artifactId>
</dependency>
当我使用Maven构建EAR时,我可以看到primefaces-5.1.jar文件按照预期包含在/WEB-INF/lib
中的WAR模块下。这似乎很有效。
我的JSF页面中有一个简单的<p:messages />
标记,通过动作类设置了JSF FacesMessage。但是,当我访问页面本身时,我看不到呈现<p:messages />
组件。相反,如果我查看来源,我 实际上会看到 "<p:messages ... />"
。也就是说,我看到了该标记的JSF源代码,而不是渲染的组件。
我在这样的JSF文件中声明PrimeFaces ......
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">
<h:head>
...
...当我查看呈现的JSF页面的来源时,我看到了文本"<html xmlns:p="http://primefaces.org/ui">"
。
在我看来,渲染的PrimeFaces没有被初始化或被正确调用。我按照PrimeFaces网站上的指示来指示如何开始使用该库,但是我的项目结构错误或者我错过了一步。
知道我的PrimeFaces JSF库没有被正确包含和使用的原因吗?
编辑:我对Faces Servlet的web.xml声明如下所示:
<web-app 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"
version="3.0">
<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>*.xhtml</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/javax.faces.resource/*</url-pattern>
</servlet-mapping>
...
答案 0 :(得分:0)
原来这是Eclipse如何将我的项目的EAR文件部署到应用服务器的问题。 WAR项目未设置为在部署程序集中包含Maven依赖项。一旦我做出了这个改变,它按预期部署,Primefaces没有问题。