Jsf 指定内部元素的条件呈现<;用户界面:重复>;?这个<;c:如果>;似乎不起作用

Jsf 指定内部元素的条件呈现<;用户界面:重复>;?这个<;c:如果>;似乎不起作用,jsf,jsf-2,jstl,el,uirepeat,Jsf,Jsf 2,Jstl,El,Uirepeat,我正在尝试使用有条件地构建自定义列表。在列表中,每次出现-1作为项值时,我都需要添加一个换行符 我试图在内部使用来实现这一点,但它似乎不起作用。它的计算结果总是false <ul> <ui:repeat value="#{topics.list}" var="topicId" > <li>#{topicId}</li> <c:if test="#{topicId eq -1}"> &

我正在尝试使用
有条件地构建自定义列表。在列表中,每次出现-1作为项值时,我都需要添加一个换行符

我试图在
内部使用
来实现这一点,但它似乎不起作用。它的计算结果总是
false

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


这可能吗?

不适用于JSTL标记,不适用。它们在视图构建时运行,而不是在视图渲染时运行。您可以将其可视化如下:当JSF构建视图时,JSTL标记首先从上到下运行,结果是一个纯JSF组件树。然后,当JSF呈现视图时,JSF组件从上到下运行,结果是一堆HTML。因此,JSTL和JSF并不像您从编码中期望的那样同步运行。在运行
JSTL标记时,由
JSF组件设置的
{topicId}
变量在范围内不可用

您需要在感兴趣的JSF组件的
呈现的
属性中指定条件,而不是使用
。因为你实际上一个也没有,所以你可以把它包起来

  • #{topicId}

替代品是


或者在你的具体情况下


当未指定客户端属性时,这两个属性也不会向HTML输出发送任何其他内容

另见:


与具体问题无关,对于

来说,这是一个错误的位置。任何遵守HTML规范的webbrowser都会忽略它。你不是说它在
  • 里面吗?或者更好,给它一个
    ,让CSS给它一个
    边距底部

    谢谢!关于使用
    引起的您的关注,在我的实际场景中,有一些元素我想提出。我只是用它们来回答问题,目的是简化问题。