【问题标题】:JSF: conditionally render a list item (<li>)JSF:有条件地呈现列表项(<li>)
【发布时间】:2011-11-19 21:17:08
【问题描述】:

我刚刚继承了一个用 JSF 实现的项目。我有以下代码在 Chrome 中看起来不错,但 Firefox 会在“空”列表项上呈现边框:

<ul>
    <li><a href="/home">Home</li>
    <li>
        <s:link view="/signup.xhtml" rendered="#{someCondition}">Sign Up</s:link>
    </li>
    <!-- etc... -->
</ul>

最终看起来像:

是否有 JSF 标记来有条件地呈现 &lt;li&gt;

【问题讨论】:

    标签: java jsf rendering


    【解决方案1】:

    您也可以使用核心 JSTL 库:

    <c:if test="#{someCondition}">
        <li>
            <s:link view="/signup.xhtml">Sign Up</s:link>
        </li>
    </c:if>
    

    我认为使用这个核心标签比使用 panelGroup 标签更容易理解代码。

    【讨论】:

      【解决方案2】:

      如果你像@CoolBeans 的例子那样做,你会在你的

    • 周围得到一个。在某些情况下,它可能会破坏您的布局,此外您并不真正想要
        下的额外标签。要摆脱它,请在您的项目周围使用 &lt;ui:fragment rendered="#{condition}" /&gt; 而不是

        你也可以使用 style 属性来隐藏一个项目:

        <li style="display: #{condition ? 'list-item' : 'none'};" />
        
    • 【讨论】:

      • 我正在使用 jsf 1.2 并且在渲染时没有获得额外的跨度。 The docs say 如果您指定样式、styleClass 或布局属性,您只会得到一个 div 或 span。
      【解决方案3】:

      没有li 是普通的 html,而不是 jsf 组件。

      您可以破解它,方法是在li 元素周围放置一个&lt;h:panelGroup /&gt; 并在其上设置rendered 属性。

      即。

       <h:panelGroup rendered="#{someCondition}">
         <li>
            <s:link view="/signup.xhtml">Sign Up</s:link>
         </li>
       </h:panelGroup>
      

      另一种选择是使用&lt;f:verbatim rendered="#{someCondition}" &gt;,但请记住它已在 JSF 2.0 中被弃用。

      【讨论】:

        猜你喜欢
        • 2015-09-20
        • 2013-11-21
        • 1970-01-01
        • 2014-10-19
        • 2012-07-29
        • 1970-01-01
        • 2021-02-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多