如何指定应用rich:extendedDataTable选择和h:selectOneMenu值的顺序

时间:2011-02-18 15:16:42

标签: java jsf datatable richfaces

我正在开发一个基本上是自定义数据库管理工具的应用程序。

页面结构基本如下:

<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请求/钩子的状态?

0 个答案:

没有答案