【问题标题】:PrimeFaces components don't display while standard JSF components render finePrimeFaces 组件不显示,而标准 JSF 组件呈现正常
【发布时间】:2012-08-30 16:24:11
【问题描述】:

Java EE6/CDI JSF2 Primefaces 3.3.1。我创建了一个搜索页面,其中包含一些用于生成搜索结果表的级联下拉列表如果我使用 jsf:

<h:dataTable  var="_employeeVList" value="#{employeeVProducer.employeeVList}"  rendered="#{not empty employeeVProducer.employeeVList}"> 
    <f:facet name="header">  
        Employee Search Results 
    </f:facet>
    <h:column>
        <f:facet name="header">Area</f:facet>
        <h:outputText value="#{_employeeVList.areaName}" />
    </h:column>
    ...
</h:dataTable>

表格呈现输出,html 看起来很正常。但是当我换成素面时:

<p:dataTable  var="_employeeVList" value="#{employeeVProducer.employeeVList}"  rendered="#{not empty employeeVProducer.employeeVList}"> 
    <f:facet name="header">  
        Employee Search Results 
    </f:facet>
    <p:column>
        <f:facet name="header">Area</f:facet>
        <h:outputText value="#{_employeeVList.areaName}" />
    </p:column>
    ...
</p:dataTable>

表格不显示。当我用 firebug 查看源代码时,我发现 html 有点奇怪:

    <table id="searchForm:results">
    <tbody>
    <tr>
    <td>
    <p:datatable rendered="true" value="[com.raytheon.myPkg.EmployeeV@f486,                                 com.raytheon.myPkg.EmployeeV@88fe,                              com.raytheon.myPkg.EmployeeV@adaf, 
                                          ...
                                com.raytheon.myPkg.EmployeeV@6a5b]" 
var="_employeeVList">
    <p:column></p:column>
    <p:column></p:column>
    ...                          
    </p:datatable></td>
    </tr>
    </tbody>
    </table>

对象在标签标签中,列是空的。 在页面的其他地方,我正在使用 p:panelGrid,它包含下拉菜单并正确显示。

我的默认模板页面中有 h:head 和 h:body。

该表由有状态的请求范围 bean 支持。

我没有使用任何外部 JavaScript。

我做错了什么?

【问题讨论】:

    标签: jsf jsf-2 primefaces


    【解决方案1】:

    因此,&lt;p:xxx&gt; 标记根本不会被解析为 JSF 标记,并且在生成的 HTML 输出中显示为普通的普通标记。这可能有以下一个或多个原因:

    1. 您忘记在视图中声明 p: XML 命名空间,或者您使用了错误的命名空间 URI。应该是:

      xmlns:p="http://primefaces.org/ui"
      
    2. 您忘记实际安装 PrimeFaces 库。这应该是一个问题

      一个。将 primefaces.jar 删除到 webapp 的 /WEB-INF/lib 文件夹中。

      b.确保您的依赖管理器(例如 Maven)已配置为将 PrimeFaces 添加到项目并将其添加到运行时 /WEB-INF/lib 文件夹

    【讨论】:

    • doh,命名空间是我检查的第一件事 - 显然不够接近。谢谢@BalusC
    【解决方案2】:

    在 BalusC 的列表中添加另一个原因:

    如果你不向你的 URL 添加 servlet URL 映射,你会得到奇怪的输出并且 JSF 不会解析你的 XHTML 页面!

    例如,如果您在 web.xml 中有以下 URL 映射:

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

    您应该使用/faces/yourpage.xhtml 来正确呈现 JSF 的输出。

    如果你使用/yourpage.xhtml,你会看到奇怪的输出。

    【讨论】:

    • 确实,但在 OP 的特殊情况下,&lt;h:dataTable&gt; 有效,所以我放弃了这种可能性:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-08
    • 1970-01-01
    • 1970-01-01
    • 2014-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多