您可以在id
JSF 组件的属性中使用 EL,但 EL 变量必须在视图构建期间可用,同时要构建 JSF 组件树。但是,在视图渲染<ui:repeat>
期间运行,而 HTML 输出将基于 JSF 组件树生成。在视图构建期间不可用,并且评估完全解释了您遇到的错误。它之所以起作用是因为它在视图渲染期间运行。<ui:repeat var>
#{class2.name}
null
<h:outputText>
如果您替换<ui:repeat>
为<c:forEach>
在视图构建期间运行的 ,那么它将按您的意图工作。这<c:forEach>
将在 JSF 组件树中生成物理上的多个<h:form>
组件,每个组件都单独生成自己的 HTML 输出(相反<ui:repeat>
,其中相同的<h:form>
组件被多次重用以生成 HTML 输出)。
<c:forEach var="class2" items="#{bean.list}" varStatus="status">
<h:form id="#{class2.name}">
<h:outputText value="#{class2.name}" />
</h:form>
</c:forEach>
但是,我真的很想知道您为什么需要这样做。通常不需要动态分配组件 ID。JSF 已经确保了 ID 的唯一性。下面的例子,
<ui:repeat var="class2" value="#{bean.list}" varStatus="status">
<h:form id="form">
<h:outputText value="#{class2.name}" />
</h:form>
</ui:repeat>
将以多种形式结束,每个形式都有一个唯一的 ID,后缀为<ui:repeat>
. 如果您确实需要#{class2.name}
用于某些 JavaScript/jQuery 目的(您没有在问题中说明您认为这将是正确的解决方案的具体功能要求,所以它只是猜测),那么只需将它包装在一个普通的香草中HTML 元素:
<ui:repeat var="class2" value="#{bean.list}" varStatus="status">
<div id="#{class2.name}">
<h:form id="form">
<h:outputText value="#{class2.name}" />
</h:form>
</div>
</ui:repeat>
或者将其设置为 JSF 组件的样式类,也可以通过 CSS 选择器进行选择:
<ui:repeat var="class2" value="#{bean.list}" varStatus="status">
<h:form id="form" styleClass="#{class2.name}">
<h:outputText value="#{class2.name}" />
</h:form>
</ui:repeat>
也可以看看: