尽管存在依赖性,但PrimeFaces组件不会在浏览器中呈现

时间:2013-08-27 10:08:18

标签: eclipse jsf jsf-2 primefaces

我在Eclipse 4.3上使用PrimeFaces 3.5开发了一个JSF Web应用程序。没有编译时或运行时错误,应用程序已成功部署。但是,我无法在浏览器中获得所需的输出。 PrimeFaces组件没有显示,而标准的JSF组件则显示。

我不确定我是否正确配置了一切。 PrimeFaces JAR至少在/WEB-INF/lib内:

enter image description here

PrimeFaces XML名称空间声明为xmlns:p="http:\\primefaces.org\ui"

enter image description here

我在FacesServlet上映射了*.xhtml

enter image description here

以下是login.xhtml的完整源代码:

  <!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:f="http://java.sun.com/jsf/core"
    xmlns:p=" http://primefaces.org/ui" >
        <h:body>  
<h:head ><title>Login Page !!</title></h:head>
 <h:form>  
<p:panel id="panel" header="Login Panel" style="margin-bottom:10px;">  

    <h:panelGrid columns="3">  
        <h:outputLabel  value="User Id:" />  
        <p:inputText id="id" value="loginBean.id" required="true" requiredMessage="ID required"/>  
        <p:message for="id" />

        <p:outputLabel value="User Name:" />  
        <p:inputText id="name" value="loginBean.name"  required="true" requiredMessage="Name required" />  
        <p:message for="name" />
    </h:panelGrid>  
</p:panel>  
<p:commandButton type="Submit" value="Submit" action="#" style="margin-right:20px;" />  

`

输出如下:

enter image description here

如你所见,<h:outputText>完成了它的工作,但<p:xxx>都没有出现。这是怎么造成的,我该如何解决?

4 个答案:

答案 0 :(得分:7)

这不是这个问题的直接答案,但它与之相关。我想分享我对问题的体验&#34; PrimeFaces标签没有渲染&#34;。我在WildFly上开发JSF 2.2应用程序,这是我的index.xhtml:

<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.org/ui">

<h:body>
    <h:form>
        <p:editor value="#{mDb.newMessage.content}"></p:editor>
    </h:form>
</h:body>
</html>

当应用程序运行时,编辑器不会显示,这对我来说非常奇怪,因为PrimeFaces在项目中配置正确。

我意外地发现了问题原因。 index.xhtml中没有h:head标记。当我放置head标签时,PrimeFaces组件成功呈现!!

我希望这可以帮助别人。

答案 1 :(得分:5)

关于PrimeFaces组件未呈现的具体问题的原因,根据屏幕截图,PrimeFaces taglib URI中有一个前导空格:

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

这很重要,因而错了。摆脱它:

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

这样,必须解析PrimeFaces组件并将其显示在HTML输出中。

对于其余部分,我强烈建议您先学习一个理智的JSF2教程。您正在制作一些概念性错误,这些错误已经被一个体面的Hello World示例所涵盖。从our JSF wiki page开始。然而,这些错误确实有这个“空白页”。它们会导致不同的问题(例如CSS / JS无法运行,表单提交不起作用)。如果你仍然坚持这一点,你应该问一个新问题。

答案 2 :(得分:0)

<强> 1
当您从JSF组件引用Managed Bean属性时,请使用JSF EL语句的正确语法。

#{bean_name.property}

在您的代码中,您忘记提供#{} 例如, login.xhtml 中的#15 行使用:

<h:inputText id="id" value="#{loginBean.id}" required="true" requiredMessage="ID required"/>

<强> 2
您将<h:head>保留在<h:body>内。这不是一个好习惯 将<h:head>放在一边<h:body> 实际结构如下:

<!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: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.org/ui">

     <h:head>
        <title></title>
     <h:head>   

     <h:body>
       <!-- Your Code -->
     </h:body>
</html>

第3
您可能在ManagedBean LoginBean.java 类中遇到异常 请发布代码而不是屏幕截图。

答案 3 :(得分:-3)

如果您构建proeject mit maven,请记住将primefaces lib的依赖项包含到pom.xml中

最好的问候