【问题标题】:Render rich:extendedDataTable渲染丰富:extendedDataTable
【发布时间】:2014-02-19 12:57:08
【问题描述】:

我需要一个显示rich:extendedDataTablerich: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

干杯

【问题讨论】:

  • 你试过把所有东西都放在一个&lt;h:form&gt;吗?
  • @Makhiel 问题仍然存在于一种全局形式中。而且我需要两种形式(实际情况下,show 按钮非常嵌套)
  • 可能是 RichFaces 中的一个错误。 extendedDataTable 对可见性很敏感(这就是数据出现在调整大小时的原因),所以也许您可以让弹出窗口“始终打开”,然后将其重新定位到屏幕外 (position:absolute; left:-2000px;)?
  • 是的,这是一个错误。渲染必须在弹出窗口显示后进行。 onclick 而不是 oncomplete 似乎有效。
  • @Makhiel 是的!它有效!谢谢,您可以发布答案以便我标记为已接受吗?

标签: jsf richfaces richfaces-modal


【解决方案1】:

使用onclick 代替oncompleteExtendedDataTable 在不可见元素中无法正确渲染(这是一个错误),因此必须在重新渲染之前使 popupPanel 可见。

【讨论】:

    【解决方案2】:

    我也有同样的问题。

    我以一种并非 100% 正确的方式解决了它:

    <a4j:commandButton 
      value="show"
      action="#{actionForm.setShowEditor('true')}"
      oncomplete="javascript:location.reload(true)"/>
    
    <a4j:region layout="block" rendered="#{actionForm.showEditor}" id="panelArea">
       <rich:popupPanel id="#{popupID}" modal="true" show="true" domElementAttachment="parent">
       ....
       tabel
       buttons
       ....
       </rich:popupPanel>
    </a4j:region>
    

    弹出窗口始终在 a4j:region 内显示 (show="true")。 但是 a4j:region 仅在变量显示 popup = true 时才显示。

    在我的情况下需要刷新整页,否则我的 ckeditor 会出现一些初始化错误。如果您在设置“#{actionForm.setShowEditor('true')} 后仅重新渲染 a4j:region ,它也应该工作。

    【讨论】:

    • 这不会重新渲染页面并因此再次“关闭”弹出窗口吗?
    • 是的,确实如此。我在这里提供的解决方案有点麻烦。在帖子中添加完整的解决方案
    • 重点是:这会重新渲染弹出窗口内的everything,这可能不是我们想要的。
    • @mabi,我不否认。这就是为什么我在顶部说我的解决方案不是 100%richface 正确的。就我而言,这是迄今为止唯一可能的解决方案(我知道)。
    猜你喜欢
    • 2011-06-11
    • 2012-02-24
    • 2011-06-12
    • 2011-06-14
    • 2012-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-20
    相关资源
    最近更新 更多