下午好。
我有以下问题,属性值的结尾
<c: foreach should vary for each row in the datatable, eh trying with expression language but simply does not work.
这是代码:
<ace:dataTable value="#{TreeTableBk.rubros}" var="rubro"
paginator="true" paginatorPosition="bottom" rows="10" style="font-size: 12px; font-family: Tahoma, Verdana, Arial, Sans-Serif">
<ace:column
headerText="Informacion">
<div align="left">
<h:panelGroup>
<c:forEach begin="0" end="#{rubro.nivel}">
<h:outputText value="__*"></h:outputText>
</c:forEach>
<h:inputText
value = "#{rubro.codigoPadre}"
rendered = "#{rubro.final_ == 'N'}"
styleClass = "SMRInputTextNegrilla6"
style = "background-color:#A5CCE7">
</h:inputText>
<h:inputText
value = "#{rubro.codigoPadre}"
rendered = "#{rubro.final_ == 'S'}"
styleClass = "SMRInputTextNegrilla6" >
</h:inputText>
<h:inputText
value = "#{rubro.codigo}"
styleClass = "SMRInputTextNegrilla6"
style = "background-color:#D1F2C7">
</h:inputText>
<h:inputText
value = "#{rubro.descripcion}"
styleClass = "SMRInputTextNegrilla6" >
</h:inputText>
<h:inputText value="#{rubro.nivel}" styleClass="SMRInputTextNegrilla6">
</h:inputText>
</h:panelGroup>
</div>
</ace:column>
</ace:dataTable>
任何想法如何解决这个问题都会有所帮助。
非常感谢
答案 0 :(得分:1)
<c:forEach>
之类的标记处理程序在构建视图期间运行,而不是在渲染视图期间运行。像<h:dataTable>
这样的UI组件在渲染视图期间运行,而不是在构建视图期间运行。因此,在<c:forEach>
运行的那一刻,<h:dataTable>
并未运行,因此其var="rubro"
在EL范围内永远不可用,因此#{rubro}
在<c:forEach>
内null
1}} 始终评估为<c:forEach>
。
因此,对于这个特定的功能要求,<ui:repeat>
完全不可能。您最好的选择是使用begin
。但是,这不支持end
的{{1}}和<c:forEach>
属性。但是,您可以创建一个custom EL function,创建一个给定大小的虚拟数组,然后将其提供给<ui:repeat value>
。
E.g。
<ui:repeat value="#{my:createArray(robro.nivel)}">
<h:outputText value="__*" />
</ui:repeat>
与
public static Object[] createArray(int size) {
return new Object[size];
}
JSF实用程序库OmniFaces具有of:createArray()
函数,正是为了这个目的,另请参阅the of:createArray()
showcase example。