0

我用rich:datatable 和rich:column 为可扩展列/行创建了一个简单的解决方案,类似于:Best way to make an expandable/collapsible subTable with rich:dataTable

facelets 代码(简化)如下:

<rich:dataTable id="detailtable"
    value="#{bean.model}"
    var="row"
    columns="2">
    <rich:column id="detail-check">
        <f:facet name="header">
            <h:selectBooleanCheckbox value="#{bean.expandAll}">
                <a4j:support event="onchange" action="#{bean.expandAllAction}"
                    reRender="detailtable" />
            </h:selectBooleanCheckbox>
        </f:facet>
        <h:selectBooleanCheckbox value="#{row.expanded}">
            <a4j:support event="onchange" reRender="detailtable" />
        </h:selectBooleanCheckbox>
    </rich:column>
    <!-- actual data column -->
    <rich:column id="detail-column"
        rendered="#{row.expanded}"
        breakBefore="true"
        colspan="2">
        <!-- detail column content -->
    </rich:column>
</rich:dataTable>

当您单击详细信息框时,这会提供一个带有展开列的表格,详细信息列呈现在实际行下方。支持 bean 上的 expandAllAction 只是迭代行并将它们的扩展属性设置为与支持 bean 中的相同,从而扩展/取消扩展所有行。

然而,这在 Internet Explorer(IE7 或 IE8)上不能正常工作,尽管它适用于 FF 和 Chrome。如果用户单击复选框,则在他单击页面上的任何其他位置之前不会呈现任何内容。支持 bean 和对象正在更新,但在单击其他元素之前不会重新渲染。

这又是 IE 的问题还是只是 Richfaces 的错误?我在 IE 和 tbody 上发现了一些类似的问题,但应该已经修复了。我可以提交错误报告,但在那之前,有什么简单的解决方法吗?

Richfaces 版本是 3.3.1,它在 Jboss 4.2.1GA 和捆绑的 Sun RI 上运行。

4

1 回答 1

1

尝试使用另一个事件,如SelectBooleanCheckBoxonclick
的 From tldoconchange“当该元素失去焦点并且其值在获得焦点后已被修改时执行的 Javascript 代码。” 并且onclick“在此元素上单击指针按钮时执行的 Javascript 代码”。

昨天是一个类似的问题。BalusC 的一条评论可能会证实我的假设“在收音机/复选框的情况下,某些浏览器中的更改事件只有在您单击 2 次时才会触发”

于 2009-11-18T15:53:57.817 回答