当标准JSF组件呈现正常时,PrimeFaces组件不会显示

时间:2012-08-30 16:24:11

标签: jsf jsf-2 primefaces

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看起来很正常。但是,当我改为primefaces时:

<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。

我做错了什么?

2 个答案:

答案 0 :(得分:2)

因此,<p:xxx>标签根本没有被解析为JSF标签,并且在生成的HTML输出中显得简单。这可能有以下一个或多个原因:

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

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

    一个。在webapp&#39; primefaces.jar文件夹中删除/WEB-INF/lib

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

答案 1 :(得分:-1)

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

如果你没有将servlet URL映射添加到你的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,你会看到奇怪的输出。