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

Java 如何指定rich:extendedDataTable选择和h:selectOneMenu值的应用顺序,java,jsf,datatable,richfaces,Java,Jsf,Datatable,Richfaces,我正在开发一个基本上是定制数据库管理工具的应用程序 页面结构基本上如下所示: <a4j:region> <h:selectOneMenu value='#{bean.selectedTable}'> ... <a4j:ajax event='change' render='tablePanel'/> </h:selectOneMenu> <a4j:outputPanel id='tablePanel'>

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

页面结构基本上如下所示:

<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>

...
[数据克隆等]
[栏目]
SelectOne菜单用于选择要显示的数据库表。备份bean是请求范围的,并设置为在初始化时选择第一个可用表作为默认表。我正在使用ExtendedDataTable子类对数据库中的数据进行分页

当我单击commandButton删除行时,extendedDataTable组件似乎在应用bean.selectedTable的值之前/确定所选行。这意味着,无论在下拉菜单中选择哪个表,RichFaces都会告诉我所选行是默认数据库表中的一些(或多或少任意)行

我验证了这是一个排序问题,当调用deleteSelectedRows()时,selectedTable的值是正确的。我使用的是RichFaces4M6,而a4j:keepAlive似乎不再存在以保存bean状态

有没有一种方法可以告诉RichFaces/JSF按照什么顺序做这些事情?我尝试在h:SelectOne菜单上使用immediate=“true”,但没有效果


此外,删除之后,tablePanel似乎不会重新呈现,而另一个添加具有相同执行和呈现属性的新记录的a4j:commandButton似乎工作正常。有没有办法调试RichFaces ajax请求的状态/通过事件将其钩住?

我不太了解RichFaces,但您确定“@region”是执行的正确值?也许可以尝试将id添加到标记中,并在execute属性中选择此id,而不是@region?我已经提到bean.selectedTable的值确实会在AJAX请求期间应用,因此region规范应该是正确的——select组件会被执行。这似乎是在table组件确定选择之后发生的。到目前为止,我使用的一种解决方法是在支持bean上声明一个
@PostConstruct
方法,并在那里查找selectOneMenu的值,以便在任何RichFaces处理之前对其进行设置。我对这次黑客攻击并不特别满意,我仍然有兴趣知道是否有一个干净的解决方案。