dataTable中JSF复合组件的唯一ID

时间:2012-08-22 15:04:29

标签: jsf-2 primefaces

我在glassfish 3.1.2中使用PrimeFaces 3.2和JSF 2。

我有<p:dataTable>,其中显示的搜索结果包含有关不同问题的信息(问题已分配给用户)。 如果有人点击指定用户的图标,则弹出<p:dialog>。 用户图标和相应对话框使用复合实现。 在复合内部我使用了一些jQuery函数,每个对话框组件都需要一个唯一的ID - 我无法找到解决这个问题的方法。

到目前为止我的调查:

我需要设置widgetVar属性,只要我在列表中只有一个用户,它就可以正常工作但似乎在dataTable中,widgetVar对于许多复合材料来说并不是唯一的。 由于用户可以在搜索结果中多次显示,因此我无法像这样设置widgetVar:

<ui:param name="myWidgetVar" value="widget_#{user.id}" />

并以这种方式使用

<p:dialog widgetVar="#{myWidgetVar}">

同样使用#{cc.id}并不能解决问题&#39;因为它只返回小部件的id而没有命名容器部分,它始终是相同的。

我需要html中显示的完整ID(例如:form:jdt123:dialog:456) - 我怎么能得到这个?

有谁知道该怎么做?

谢谢皮特

2 个答案:

答案 0 :(得分:2)

我的解决方案是使用我还不知道的#{cc.clientId} 这给了我完整的html元素id,它是用UINamingContainer#getSeparatorChar粘合的一系列标识符(例如:form:jdt123:dialog:jdt456)

答案 1 :(得分:2)

感谢您的回答。你解决了我无关的问题,但我想我偶然发现了另一个问题的解决方案。

来自PrimeFaces用户指南(http://primefaces.org/documentation.html):

8.2 EL功能

PrimeFaces提供了内置的EL扩展,它们是常见用例的助手。

常用功能

PrimeFaces UserGuide 8.2 EL Functions Table

组件

<h:form id="form1">
     <h:inputText id="name" />
</h:form>
//#{p:component(‘name’)} returns ‘form1:name’

WidgetVar

<p:dialog id="dlg">
     //contents
</p:dialog>
<p:commandButton type="button" value="Show" onclick="#{p:widgetVar(‘dlg’)}.show()" />

看起来你对WidgetVar实现最感兴趣。