2011-08-28 63 views
4

我想构建简单的使用primefaces的JSF应用程序,但不知何故primefaces组件不能正确渲染。我不明白发生了什么问题。简单的primefaces应用程序不工作

我想显示以下的facelet文件:

<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:p="http://primefaces.prime.com.tr/ui"> 
    <h:head> 
     <link type="text/css" 
       rel="stylesheet" 
       href="/Themes/primefaces-dot-luv/theme.css" /> 
    </h:head> 
    <h:body> 
     <p:spinner value="100" style="height: 10px" /> 
     <br/> 
     <p:button value="Navigate"></p:button> 
    </h:body> 
</html> 

我使用Eclipse来运行Tomcat服务器上的应用程序。当我运行应用程序并查看该页面的源代码在浏览器(Firefox),我获得以下来源:

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:p="http://primefaces.prime.com.tr/ui"> 
    <head> 
     <link type="text/css" rel="stylesheet" href="Themes/primefaces-dot-luv/theme.css" /> 
    </head> 
    <body> 
     <p:spinner value="100" style="height: 10px"></p:spinner> 
     <br /> 
     <p:button value="Navigate"></p:button> 
    </body> 
</html> 

我觉得PrimeFaces组件都没有得到正确呈现。其他JSF标签,如<h:head><h:body>分别正确转换为<head><body>元素。只有以<p:>开头的标签才会被转换。

以下是我的项目结构:

enter image description here

web.xml看起来是这样的:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> 
    <display-name>HelloJSF</display-name> 
    <welcome-file-list> 
    <welcome-file>index.jsp</welcome-file> 
    <welcome-file>default.jsp</welcome-file> 
    </welcome-file-list> 
    <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> 
    <context-param> 
    <param-name>primefaces.THEME</param-name> 
    <param-value>none</param-value> 
    </context-param> 
    <context-param> 
    <description>State saving method: 'client' or 'server' (=default). See JSF Specification 2.5.2</description> 
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name> 
    <param-value>client</param-value> 
    </context-param> 
    <context-param> 
    <param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name> 
    <param-value>resources.application</param-value> 
    </context-param> 
    <listener> 
    <listener-class>com.sun.faces.config.ConfigureListener</listener-class> 
    </listener> 
    <servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>*.jsf</url-pattern> 
    </servlet-mapping> 
    <servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>*.faces</url-pattern> 
    </servlet-mapping> 
</web-app> 

我使用Eclipse,Tomcat服务器。 JSF 2和primefaces 3库。

嗨,之后整个项目的一些亲密的检查,我发现,从网站dowlonaded primefaces罐子没有过任何类。罐子 本身是腐败的。我下载了同样的jar三次,然后jar被 弄坏了。所以我下载了包含源文件和 二进制文件的zip文件,我的应用程序开始工作。

+1

Primefaces依赖于最新Java EE标准中的一些自动注册工具,这些工具不是由tomcat6实现的。不知道是否可以手动注册它们。但最近glassfish版本支持它。 – Eelke

+0

哦。好。那么它会在JBoss中工作吗? – Shekhar

+0

你可以发布web.xml的内容吗?确保你已经启用了JSF的过滤器。 – aseychell

回答

5

试着改变你的web.xml servlet映射:

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

的方式告诉我们,如果Facelets的Servlet是处理你的XHTML是看浏览器接收到什么。如果它看起来像你的xhtml文件,那么你有错误的配置。

+0

然而,JSF核心,HTML和Facelets标签库已经被正确解析,所以'FacesServlet'肯定会被调用。 – BalusC

0

你需要改变

xmlns:p="http://primefaces.prime.com.tr/ui" 

xmlns:p="http://primefaces.org/ui" 
+1

这是从3.0 M4开始引入的,但OP使用的是3.0 M2。所以这个答案是错误的。请注意,AlanObject当前接受的答案也是错误的; OP已经自己解决了这个问题(参见问题底部的引用),但是由于某种原因(这确实令人困惑,并且不是使用堆栈溢出的正确方式),OP从未公布它作为答案。 – BalusC

0

你应该改变你的命名空间到的xmlns:P = “http://primefaces.org/ui”

和以这种方式实现按钮

<p:commandButton value="Home" process="@this" action="actionMethod()" immediate="true" rendered="true or renderingMethod()" />