gpt4 book ai didi

jsf - 在 ? 中指定元素的条件渲染 似乎不起作用

转载 作者:行者123 更新时间:2023-12-03 11:52:27 27 4
gpt4 key购买 nike

我正在尝试使用 <ui:repeat> 有条件地构建自定义列表.在列表中每次出现 -1 作为 item-value 时,我需要添加一个换行符。

我尝试使用 <c:if><ui:repeat>为此,但它似乎不起作用。它总是评估 false .

<ul>      
<ui:repeat value="#{topics.list}" var="topicId" >
<li>#{topicId}</li>
<c:if test="#{topicId eq -1}"> <br/> </c:if>
</ui:repeat>
</ul>

这可能吗?

最佳答案

不带 JSTL 标签,不。它们在 View 构建期间运行,而不是在 View 渲染期间运行。您可以将其可视化如下:当 JSF 构建 View 时,JSTL 标记首先从上到下运行,结果是一个纯 JSF 组件树。然后当 JSF 渲染 View 时,JSF 组件从上到下运行,结果是一堆 HTML。因此,JSTL 和 JSF 不会像您对编码所期望的那样同步运行。目前您的 <c:if> JSTL 标签标签运行,#{topicId}<ui:repeat> 设置的变量JSF 组件在范围内不可用。
而不是使用 <c:if> ,需要在rendered中指定条件感兴趣的 JSF 组件的属性。由于您实际上没有,您可以将其包装在 <ui:fragment> 中.

<ul>      
<ui:repeat value="#{topics.list}" var="topicId" >
<li>#{topicId}</li>
<ui:fragment rendered="#{topicId eq -1}"><br/></ui:fragment>
</ui:repeat>
</ul>
替代方案是 <h:panelGroup>
<h:panelGroup rendered="#{topicId eq -1}"><br/></h:panelGroup>
或在您的特定情况下 <h:outputText escape="false">
<h:outputText value="&lt;br/&gt;" escape="false" rendered="#{topicId eq -1}" />
因为当没有指定客户端属性时,两者都不会向 HTML 输出发出任何其他内容。
也可以看看:
  • JSTL in JSF2 Facelets... makes sense?

  • 无关 对于具体问题,这是 <br/> 的错误位置.任何遵守 HTML 规范的网络浏览器都会忽略它。你不是说它在 <li>里面吗? ?或者更好,给它一个 class并让 CSS 给它一个 margin-bottom .

    关于jsf - 在 <ui :repeat>? 中指定元素的条件渲染 <c:if> 似乎不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7248439/

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