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。
我做错了什么?
答案 0 :(得分:2)
因此,<p:xxx>
标签根本没有被解析为JSF标签,并且在生成的HTML输出中显得简单。这可能有以下一个或多个原因:
您忘记在视图中声明p:
XML命名空间,或者您使用了错误的命名空间URI。它应该是:
xmlns:p="http://primefaces.org/ui"
您忘记了实际安装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
,你会看到奇怪的输出。