【问题标题】:Unique ID for JSF composite component inside dataTable数据表内 JSF 复合组件的唯一 ID
【发布时间】:2012-08-22 15:04:28
【问题描述】:

我在 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} 并不能解决问题,因为它只返回小部件的 id,而没有始终相同的命名容器部分。

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

有人知道该怎么做吗?

谢谢皮特

【问题讨论】:

    标签: jsf-2 primefaces


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      8.2 EL 函数

      PrimeFaces 提供内置的 EL 扩展,这些扩展是常见用例的助手。

      常用功能

      组件

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

      小部件变量

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

      您似乎对 WidgetVar 实现最感兴趣。

      【讨论】:

      • 看起来很不错,但我无法再证明了。
      • 是的,我知道你会很早就过了这个,但我想我还是把它扔掉,以防其他人像我一样偶然发现它:)。
      猜你喜欢
      • 2011-06-04
      • 2011-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多