我需要动态的列数。 Richfaces 为其提供<rich:columns>
在 richfaces 3.3.3-final 中,但对于 Richfaces 4 他们似乎推荐<c:forEach>
.
c:forEach
我无法让它正常工作。因为我不能依赖数据表中的 var,所以我不知道如何提供数据<c:forEach>
具有正确的列列表。 (每行都有自己的值,但标题相同)
基本上我想要显示的数据是一个包含 x 大小的行的列表,每行都有一个 y 大小的列值列表。但怎样才能有<c:forEach>
告诉支持 bean 它位于哪一行,以便我可以输入正确的列?
ui/a4j:重复
我不想重新发明轮子,因为我需要冻结列和许多其他功能。已考虑以这种方式创建表 html 并使用 jQuery 实现其他功能。然而,这将是无望的维护和大量的工作。
我还考虑过从动态创建子项的支持 bean 中构建它,但我根本不喜欢那样。这必须是最后的手段。
使用:Tomcat 7、servlet 3.0、JSF 2.1x - Mojarra、Richfaces 4.x
Update
好的,我终于得到了一些结果。但是我的标题不显示。值显示完美,但标题不显示。通过迭代或其他方式执行它们可能会遇到一些问题?
<rich:dataTable value="#{controller.rows}"
var="row">
<c:forEach items="#{controller.columns}" var="column">
<rd:column id="name" width="250">
<f:facet name="header">
<h:outputText value="#{row.myArrayList[column].header}" />
</f:facet>
<h:inputText value="#{row.myArrayList[column].value}" disabled="#{row.myArrayList[column].open}"/>
</rd:column>
</c:forEach>
</rich:dataTable>
The <c:forEach>
确实是你能得到的最好的。这<ui/a4j:repeat>
不会工作,因为它在视图渲染期间运行,而UIData
组件真正需要的UIColumn
孩子们,不UIRepeat
孩子们。
为了得到<c:forEach>
要工作,您需要为其提供所有属性名称的列表/映射(如果是映射,可能还需要标题标签)。这是一个具体的启动示例,假设Item
有属性id
, name
and value
然后#{bean.itemPropertyNames}
返回一个List<String>
正是这些属性名称。
<rich:dataTable value="#{bean.items}" var="item">
<c:forEach items="#{bean.itemPropertyNames}" var="itemPropertyName">
<rich:column>
#{item[itemPropertyName]}
</rich:column>
</c:forEach>
</rich:dataTable>
如果您还需要显示列标题,那么最好是有一个Map<String, String>
其中键代表属性名称,值代表标头值。
<rich:dataTable value="#{bean.items}" var="item">
<c:forEach items="#{bean.itemProperties}" var="itemProperty">
<rich:column>
<f:facet name="header">#{itemProperty.value}</f:facet>
#{item[itemProperty.key]}
</rich:column>
</c:forEach>
</rich:dataTable>
无论哪种方式,唯一的缺点是#{bean}
of <c:forEach items>
在此构造中不能是一个视图范围的构造。除非您关闭部分状态保存,否则它将根据每个请求重新创建。它必须是一个请求范围的请求(或会话或应用程序)。请注意,它不一定需要与中的 Bean 相同<rich:dataTable value>
.
也可以看看:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)