我刚刚继承了在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标记有条件地呈现<li>
?
答案 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标记更容易理解。