【发布时间】:2014-12-30 03:10:46
【问题描述】:
我想使用 PrimeFaces TabView 组件在选项卡中显示来自我们服务器的数据。我需要三个选项卡来显示三个具有不同数据的表。
如果我写,它会起作用:
<p:tabView>
<p:tab>
// <p:dataTable> logic comes here
</p:tab>
<p:tab>
// and here
</p:tab>
</p:tabView>
我的问题是每个选项卡的 dataTable 逻辑或多或少都相同。我不喜欢这种代码重复,所以我想创建一个自定义选项卡,其工作方式如下:
summary.xhtml
<p:tabView>
<my:customTab dataToDisplay="#{myBean.dataSet1}">
<my:customTab dataToDisplay="#{myBean.dataSet2}">
</p:tabView>
但到目前为止,我还没有成功实现一个正在工作的复合组件。我的方法是使用此代码创建一个单独的 customTab.xhtml 文件
customTab.xhtml
<ui:composition // namespace definitions
... >
<composite:interface>
<composite:attribute name="dataToDisplay" />
</composite:interface>
<composite:implementation>
<p:tabView>
// dataTable logic comes here
</p:tabView>
</composite:implementation>
</ui:composition>
但是,tabView 组件不会显示任何选项卡。可能是这种情况,因为 JSF 将为每个 my:customTab-Tag 绘制一个单独的组件。这样tabView 将不会看到my:customTab 中有一个p:tab。我需要做什么才能让 TabView 识别 my:customTab 中的 p:tab ?
【问题讨论】:
-
将组件注入primefaces组件确实是一项危险的任务,您需要使用包内的代码重新编译primefaces。 @ktwo 建议可能是一个更好/更有效的建议 - 这就是我们所做的,事实上我们甚至在某些选项卡中使用了相同的数据只是新表。还使用 TabModel 来做选项卡,而不是一一列出它们
-
我也有同样的问题。页面之间的数据可以使用
@RequestScoped传递,除非没有ajax 请求。我想发表评论,但我不能。 I got it from here。如果我错了,请纠正我。
标签: jsf primefaces tabview