【问题标题】:jsf/primefaces dataTable with links; wrong one opened/displayed带有链接的 jsf/primefaces 数据表;错误的一个打开/显示
【发布时间】:2017-08-14 18:58:41
【问题描述】:

我有一个 primefaces 数据表,其中包含多个 URL 作为数据。每行有一个 URL。一条线有一个按钮。如果单击它,则会打开一个对话框,其中包含一个带有相应 URL 网站的 iframe。

这是(缩短的)xhtml:

<p:dataTable id="transResult" rendered="#{not empty urlList}"
             var="aUrl"
             value="#{urlList}">
   <p:column ...></p:column>
   ...
   <p:column>
       <p:commandButton id="urlBtn" value="#{aUrl}"     
                        onclick="PF('showURL').show();"/>

       <p:dialog id="urlDialog" widgetVar="showURL">
           <h:outputLabel value="URL:&#160;#{aUrl}"/>
           <iframe src="#{aUrl}"/> 
       </p:dialog>
   </p:column>
</p:dataTable>

带有按钮的表格显示正确:

|url1|
|url2|
...

如果我用 firebug 查看隐藏的对话框,则 URL 放置正确! id的生成也是正确的:

transResult:0:urlDialog
transResult:1:urlDialog
...

问题: 但是当我点击一个按钮时,带有 last URL 的对话框总是 openend。

知道为什么会出错吗?

【问题讨论】:

  • 我相信你不能在对话框中使用 aUrl。如果您将对话框最后放在它所属的 xhtml 中,那会更清楚。单击按钮时,您必须在 bean 上设置一个属性,使对话框查看此属性,并且不要忘记在单击按钮时update 对话框内容。您总是看到最后一个的原因可能是您当前有许多具有相同 widgetVar 的对话框,所以它只会选择最后一个
  • aUrl 只是一个字符串。与 dataTable 中的任何其他数据一样,它被正确放置在对话框中的 等处。我用萤火虫检查了这个。但是使用相同的 widgetVar 的想法很有趣。
  • 无论如何,您一开始就不应该将对话框放在数据表中。我会在 xhtml 中最后放置一个通用对话框,并在单击按钮时替换内容。 stackoverflow.com/questions/30206643/…
  • @JaqenH'ghar 是对的。我也怀疑 urlList 中使用的类。有equals和hasCode方法吗?

标签: jsf primefaces


【解决方案1】:

我找到了一个似乎可行的解决方案。基础是有不同的widgetVar。

<p:dataTable id="transResult" rendered="#{not empty urlList}"
         var="data"
         value="#{urlList}">
    <p:column ...></p:column>
    ...
    <p:column>
        <p:commandButton id="urlBtn" value="#{aUrl}"     
                         onclick="PF('showURL#{data.id}').show();"/>

       <p:dialog id="urlDialog" widgetVar="showURL#{data.id}">
           <h:outputLabel value="URL:&#160;#{data.aUrl}"/>
           <iframe src="#{data.aUrl}"/> 
       </p:dialog>
   </p:column>
</p:dataTable>

所以我们每行都有一个 ID,它也被添加到 widgetVar 以使它们不同。

请注意,使用此解决方案,所有内容都是在创建表时计算的。所以没有什么“动态”的。但是对于我的需要,这没问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-01
    • 1970-01-01
    • 2023-03-27
    • 2020-11-06
    • 1970-01-01
    相关资源
    最近更新 更多