1

我有一个在 a4j:outputPanel 中定义的丰富数据表,它绑定到创建 HtmlDataTable 的会话范围的支持 bean。就其本身而言,我的代码的那部分工作正常,并且 dataTable 看起来不错。

在页面的另一部分,我创建了一些基本的文本链接作为 a4j:commandLinks,当单击这些链接时,应该使用新的行和列数据重新呈现 dataTable。行数据更新正常,但列数据(标题文本、宽度等)不是。

在对代码进行了一番挖掘之后,似乎在重新渲染该表期间没有调用 HtmlDataTable 的支持 bean,但是如果重新加载整个页面,它就会重新渲染;所以似乎只是 ajax4jsf/reRendering 部分在这里咬我。

有什么方法可以强制 reRender 进程使 dataTable 结构无效,以便它再次调用支持 bean?

如果这意味着什么,我也在使用 Seam;因此,如果可以找到使用它的解决方案,那也会很有帮助。

谢谢!

4

2 回答 2

1

For posterity's sake, I've found the solution: Whenever the a4j request is made to my action listener bean, I have it tell the dataTable-building bean to flush its table. That bean then does a simple myDataTable.getParent().getChildren().remove(myDataTable). This page helped me figure it out: http://www.coderanch.com/t/213312/JSF/java/dynamic-datatable-binding.

于 2010-03-11T18:15:22.400 回答
0

在您的操作中,只需从您的上下文中删除会话范围的 bean。

例如:

<a:commandLink action="#{someBean.perform}" value="Submit" reRender="myTable"/>

和行动:

@Name("someBean")
public class SomeBean {

  public void perform() {
    //do stuff

    Contexts.removeFromAllContexts("myBean");  
  }
}

否则,如果您的 dataTable 填充了一个列表,那么它可能就像调用 search() 或任何加载数据的方法一样简单。

于 2010-03-11T09:53:25.743 回答