动态richfaces dataTable,ajax4jsf和reRendering

时间:2010-03-10 22:40:28

标签: datatable richfaces seam ajax4jsf

我有一个在a4j:outputPanel内部定义的丰富的dataTable,它绑定到创建HtmlDataTable的会话范围的辅助bean。就我自己来说,我的代码部分工作正常,而dataTable看起来很好。

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

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

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

如果它意味着什么,我也在使用Seam;所以,如果有一个解决方案可以使用它,那也是有帮助的。

谢谢!

2 个答案:

答案 0 :(得分:1)

为了后人,我找到了解决方案:每当向我的动作监听器bean发出a4j请求时,我就让它告诉dataTable-building bean刷新它的表。那个bean然后做一个简单的myDataTable.getParent()。getChildren()。remove(myDataTable)。这个页面帮助我弄明白了:http://www.coderanch.com/t/213312/JSF/java/dynamic-datatable-binding

答案 1 :(得分:0)

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

例如:

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

和行动:

@Name("someBean")
public class SomeBean {

  public void perform() {
    //do stuff

    Contexts.removeFromAllContexts("myBean");  
  }
}

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