【发布时间】:2014-02-19 12:57:08
【问题描述】:
我需要一个显示rich:extendedDataTable的rich:popup,当用户按下按钮时,应该显示popup,并且必须重新渲染extendedDataTable,代码如下:
<rich:popupPanel id="popupId" show="false" modal="true">
<h:form>
<rich:extendedDataTable
value="#{bean.list}"
var="item" rows="5" id="table">
<rich:column>
<h:outputLabel value="#{item}" />
</rich:column>
</rich:extendedDataTable>
<a4j:commandButton value="x" immediate="true"
oncomplete="#{rich:component('popupId')}.hide(); return false;"/>
</h:form>
</rich:popupPanel>
<h:form>
<a4j:commandButton value="show"
oncomplete="#{rich:component('popupId')}.show(); return false;"
render="table" immediate="true" />
</h:form>
我第一次按下show 时它工作正常,但是当我使用X 按钮关闭面板并再次按下show 按钮时,extendedDataTable 显示为空(它已呈现但显示为空,见下图)。
如果我在popup 之前添加一个空的extendedDataTable,问题就解决了,如下所示:
<rich:extendedDataTable />
<rich:popupPanel>
...
rich:dataTable 不会出现问题,但我需要extendedDataTable。
另外的异常行为是当我调整浏览器大小时,数据会出现。
平台
- RichFaces:4.2.2.Final
- 春季:3.1.1.RELEASE
干杯
【问题讨论】:
-
你试过把所有东西都放在一个
<h:form>吗? -
@Makhiel 问题仍然存在于一种全局形式中。而且我需要两种形式(实际情况下,
show按钮非常嵌套) -
可能是 RichFaces 中的一个错误。
extendedDataTable对可见性很敏感(这就是数据出现在调整大小时的原因),所以也许您可以让弹出窗口“始终打开”,然后将其重新定位到屏幕外 (position:absolute; left:-2000px;)? -
是的,这是一个错误。渲染必须在弹出窗口显示后进行。
onclick而不是oncomplete似乎有效。 -
@Makhiel 是的!它有效!谢谢,您可以发布答案以便我标记为已接受吗?
标签: jsf richfaces richfaces-modal