JSF:有条件地呈现一个列表项(<li>)</li>

时间:2011-09-18 23:59:58

标签: java jsf rendering

我刚刚继承了在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>

最终看起来像:

enter image description here

是否有JSF标记有条件地呈现<li>

3 个答案:

答案 0 :(得分:26)

如果您在@CoolBeans示例中执行此操作,则会得到&lt; span&gt;围绕你的&lt; li&gt;。在某些情况下,它可能会破坏你的布局,除了你真的不想在&lt; ul&gt;下面有额外的标签。要摆脱它,请在项目周围使用<ui:fragment rendered="#{condition}" />而不是&lt; h:panelGroup&gt ;.

您还可以使用style属性隐藏项目:

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

答案 1 :(得分:18)

没有li是vanilla html,而不是jsf组件。

您可以通过在<h:panelGroup />元素周围加li并在其上设置rendered属性来破解

即。

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

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

答案 2 :(得分:8)

您还可以使用核心JSTL库:

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

我认为使用此核心标记使代码比使用panelGroup标记更容易理解。