我为具有rich:datatable和rich:列的可扩展列/行创建了一个简单的解决方案,类似于: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。
答案 0 :(得分:1)
尝试使用其他活动,例如onclick
来自selectBooleanCheckBox的tldoc:onchange
是“当此元素失去焦点时执行的Javascript代码,并且自获得焦点后其值已被修改。”和onclick
是< em>“在此元素上单击指针按钮时执行的Javascript代码。”
昨天是similar question。 BalusC的一条评论可能会证实我的假设“在无线电/复选框的情况下,某些浏览器中的更改事件仅在您单击2次时才会触发”