【问题标题】:PrimeFaces components are not rendered in browser in spite of dependency being present尽管存在依赖关系,PrimeFaces 组件不会在浏览器中呈现
【发布时间】:2013-08-27 10:08:18
【问题描述】:

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

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

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

我将FacesServlet 映射到*.xhtml

这是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;" />  

`

输出如下:

如您所见,&lt;h:outputText&gt; 完成了工作,但没有一个&lt;p:xxx&gt; 出现。这是如何引起的,我该如何解决?

【问题讨论】:

  • 不,它不是在渲染一个空页面。如您所见,页面已部分呈现。我的猜测是抛出异常,服务器日志说什么?此外,编辑您的问题并将代码截图替换为实际代码。
  • 请勿为代码发布图片.....

标签: eclipse jsf jsf-2 primefaces


【解决方案1】:

这不是对这个问题的直接回答,但它与之相关。我想分享我对“PrimeFaces 标签未呈现”问题的经验。我正在 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组件渲染成功!!

我希望这可以帮助某人。

【讨论】:

    【解决方案2】:

    至于您的 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 无法正常工作和表单提交无法正常工作)。如果您仍然坚持这一点,那么您基本上应该问一个新问题。

    【讨论】:

    【解决方案3】:

    1.
    当您从 JSF 组件中引用托管 Bean 属性时,请对 JSF EL 语句使用正确的语法。

    #{bean_name.property}
    

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

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

    2.
    您将&lt;h:head&gt; 保留在&lt;h:body&gt; 中。这不是一个好习惯。
    &lt;h:head&gt; 保持在&lt;h:body&gt; 之外。
    实际结构是:

    <!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 类中遇到异常。
    请发布代码而不是屏幕截图。

    【讨论】:

    • bean 配置正确且运行良好..请参阅已接受的答案..我犯的愚蠢错误...
    【解决方案4】:

    如果你构建你的项目 mit maven,记得在 pom.xml 中包含 primefaces lib 的依赖项

    最好的问候

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多