我们正面临动态列的问题。我们有一个表,其中的列取决于一些先前选择的过滤器。当您进入页面时,您可以选择年份和其他一些标准,并使用这些值呈现表格。我们的问题是,当您选择不同的标准时,列可能会有所不同,这是一个问题,因为 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),我会更新两个地方的解决方案(如果有的话)。