我有一个在a4j:outputPanel中定义的富dataTable,它绑定到创建HtmlDataTable的会话作用域支持bean。就其本身而言,我的那部分代码工作得很好,dataTable看起来也不错。
在页面的另一部分,有一些我创建为a4j:commandLinks的基本文本链接,当单击这些链接时,应该用新的行和列数据重新呈现dataTable。行数据更新正常,但列数据(标题文本、宽度等)不是。
在仔细研究了一下代码之后,似乎没有在该表的reRendering期间调用HtmlDataTable的支持bean,但是如果重新加载整个页面,它就是reRendered;因此,这里似乎只有ajax4jsf/reRendering部分才让我头疼。
有没有什么方法可以强制reRender进程使dataTable结构无效,以便它再次调用支持bean?
如果它有任何意义,我也在使用Seam;所以如果使用它可以找到解决方案,那也会很有帮助。
谢谢!
发布于 2010-03-12 02:15:22
为了后人着想,我找到了解决方案:无论何时向我的操作侦听器bean发出a4j请求,我都会让它告诉构建dataTable的bean刷新它的表。然后该bean执行一个简单的myDataTable.getParent().getChildren().remove(myDataTable).这个页面帮我弄清楚了:http://www.coderanch.com/t/213312/JSF/java/dynamic-datatable-binding。
发布于 2010-03-11 17:53:26
在您的操作中,只需从上下文中删除会话范围的bean即可。
例如:
<a:commandLink action="#{someBean.perform}" value="Submit" reRender="myTable"/>以及动作:
@Name("someBean")
public class SomeBean {
public void perform() {
//do stuff
Contexts.removeFromAllContexts("myBean");
}
}否则,如果您的搜索中填充了一个列表,那么可能只需调用dataTable ()或任何加载数据的方法就可以了。
https://stackoverflow.com/questions/2421206
复制相似问题