我在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) - 我怎么能得到这个?
有谁知道该怎么做?
谢谢皮特
答案 0 :(得分:2)
我的解决方案是使用我还不知道的#{cc.clientId}
这给了我完整的html元素id,它是用UINamingContainer#getSeparatorChar粘合的一系列标识符(例如:form:jdt123:dialog:jdt456)
答案 1 :(得分:2)
感谢您的回答。你解决了我无关的问题,但我想我偶然发现了另一个问题的解决方案。
来自PrimeFaces用户指南(http://primefaces.org/documentation.html):
PrimeFaces提供了内置的EL扩展,它们是常见用例的助手。
组件
<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实现最感兴趣。