gpt4 book ai didi

forms - 如何在 in id attribute of a JSF component 中使用 EL

转载 作者:行者123 更新时间:2023-12-04 02:48:07 26 4
gpt4 key购买 nike

我有以下代码:

<ui:repeat var="class2" value="#{bean.list}" varStatus="status">
<h:form id="#{class2.name}">
<h:outputText value="#{class2.name}" />
</h:form>
</ui:repeat>

但是,当我打开页面时,它会出现如下错误:

component identifier must not be a zero-length String



但它正确打印在 <h:outputText> .这是怎么引起的,我该如何解决?

最佳答案

您可以在 id 中使用 EL JSF 组件的属性,但 EL 变量必须在 期间可用查看构建时间 ,而 JSF 组件树将被构建。然而,<ui:repeat>运行期间 查看渲染时间 ,而 HTML 输出将基于 JSF 组件树生成。 <ui:repeat var>在 View 构建期间不可用和 #{class2.name}计算结果为 null这完全解释了你得到的错误。它适用于 <h:outputText>是因为它在 View 渲染时间运行。

如果更换 <ui:repeat>来自 <c:forEach> ,它在 View 构建期间运行,然后它将按您的意图工作。 <c:forEach>即会产生物理倍数 <h:form> JSF 组件树中的组件,每个组件都单独生成自己的 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>

也可以看看:
  • JSTL in JSF2 Facelets... makes sense?
  • 关于forms - 如何在 <ui :repeat var> in id attribute of a JSF component 中使用 EL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18358604/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com