1

我们正面临动态列的问题。我们有一个表,其中的列取决于一些先前选择的过滤器。当您进入页面时,您可以选择年份和其他一些标准,并使用这些值呈现表格。我们的问题是,当您选择不同的标准时,列可能会有所不同,这是一个问题,因为 c:forEach 不是那么动态的。

如果您查看 IceSoft Wiki 中提供的示例,您会看到与我们的代码类似的内容(但我们的代码要复杂得多): http: //www.icesoft.org/wiki/display/ICE/DataTable+动态+列

问题来自这句话:

<c:forEach items="#{backing.columns}" var="colModel">

backing.columns是静态的。但是如果你改变它的元素数量(在这个例子中它没有意义,因为“列”列表中的值与任务类中的属性匹配,但是如果你打印一个列表而不是列表)你就会遇到问题,如下所述: http://drewdev.blogspot.com.es/2008/08/cforeach-with-jsf-could-ruin-your-day.html

当我们更改列时,我们尝试重新创建组件列表:

component.getChildren().clear(); //component is of UIComponent type

但是没有用。我们还尝试从 PhaseListener 的上下文中恢复视图,但没有积极的结果。我们已经没有想法了。

任何想法(或解决方案:D)将不胜感激。如果有人需要更具体的代码,请问。

TIA。

PS:这个问题也发布在ICEFaces论坛(http://www.icesoft.org/JForum/posts/list/0/21842.page#76787),我会更新两个地方的解决方案(如果有的话)。

4

1 回答 1

1

我们已经解决了这个问题,正如我们在 IceSoft 论坛上所建议的那样,将导航重定向到同一页面以获得全新的组件树。为此,您需要将您的状态置于一个能够生存的 bean 中,但由于我们的支持 bean 通常是视图范围的,所以这不是问题。为了实现这一点,我们更改了 valueChangeListener 方法,该方法正在更改 c:foreach后面的列表并使用了一个 action 方法,在这个 action 方法中,我们返回null作为导航规则以重新加载页面。

查看更多信息:http: //www.icesoft.org/JForum/posts/list/21842.page#sthash.sXtPazmS.dpuf

于 2013-05-16T08:55:36.800 回答