【发布时间】:2013-03-24 01:04:33
【问题描述】:
我正在使用 JSTL forEach 和 h:dataTable 创建一个动态表,并很好地显示所有控件和潜在的错误消息,但现在我坚持为每个控件设置值。我需要创建(我认为)一个动态 EL 表达式来设置值,但我的任何版本都无法正常工作。我希望使用 c:out 构建表达式,但发现该标记在 JSF2 中不可用。
那么,是否可以在页面中构建动态表达式? 如果控件尚未构建,我如何在 backing bean 中设置表达式?
<h:dataTable id="dtDetails" styleClass="slate_table" value="#{remediationDetail.eventList}" var="dataItem">
<c:forEach items="#{remediationDetail.eventHeaders}" var="key">
<h:column>
<f:facet name="header">#{key.fieldDefinition.fieldConfiguration.customLabel}</f:facet>
<h:inputText value="" id="txtNumber" styleClass="remediation_textbox error_marker" title="#{remediationDetail.errorMessages(dataItem.id, key.fieldDefinition.id)}">
<f:convertNumber maxFractionDigits="0" maxIntegerDigits="19"/>
</h:column>
</c:forEach>
</h:dataTable>
一如既往,感谢任何帮助或指导。
问候,
迈克
【问题讨论】:
-
我认为当 foreach 将创建多个具有相同 id 的 inputText 时你会遇到问题。如果你省略 id 属性,你可以避免这种情况发生。
-
你有没有试过写类似的东西:#{remediationDetail.errorMessages(#{dataItem.id},#{key.fieldDefinition.id}?
-
我还没有走这条路,但很快就会走。动态表达式会更快,因为我会知道表达式引用的确切变量/方法。调用支持 bean 将使我使用反射并通过对象变量运行循环。在 JSF 接管并呈现页面后,Id 应该是唯一的。
-
好的,告诉我们它是否有效,我很想知道它:)
-
由于您使用的是 JSF 2,因此最好使用
<ui:repeat>并在此基础上构建您的<table>。另外,您可能想阅读此 Q/A:JSTL in JSF2 Facelets… makes sense?