【发布时间】: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: #{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