我正在开发一个基本上是自定义数据库管理工具的应用程序。
页面结构基本如下:
<a4j:region>
<h:selectOneMenu value='#{bean.selectedTable}'>
...
<a4j:ajax event='change' render='tablePanel'/>
</h:selectOneMenu>
<a4j:outputPanel id='tablePanel'>
<rich:extendedDataTable id='table' selection='#{bean.selectedRows}' ...>
<f:facet name='header'>
[datascroller etc.]
<a4j:commandButton action='#{bean.deleteSelectedRows}' execute='@region' render='tablePanel'/>
</f:facet>
[columns]
</rich:extendedDataTable>
</a4j:outputPanel>
<a4j:region>
selectOneMenu用于选择要显示的数据库表。支持bean是请求范围并设置为在初始化时选择第一个可用表作为默认值。我正在使用ExtendedDataTable子类来分页数据库中的数据。
当我单击commandButton来删除行时,似乎extendedDataTable组件确定应用了bean.selectedTable的值之前/之前的值。这意味着无论在下拉菜单中选择哪个表,RichFaces都会告诉我所选行是默认数据库表中的一些(或多或少任意)行。
我验证这是一个排序问题,当调用deleteSelectedRows()时,selectedTable的值是正确的。我正在使用Richfaces 4 M6和a4j:keepAlive似乎不再存在以保留bean状态。
有没有办法告诉RichFaces / JSF执行这些操作的顺序?我尝试在h:selectOneMenu上使用immediate =“true”,但这没有帮助。
此外,删除后,tablePanel似乎没有被重新呈现,而另一个a4j:commandButton添加具有相同的执行和呈现属性的新记录似乎工作正常。有没有办法通过事件调试RichFaces ajax请求/钩子的状态?