代码之家  ›  专栏  ›  技术社区  ›  Dejell

<c:if test>在JSF2 Facelets中似乎总是正确的

  •  10
  • Dejell  · 技术社区  · 14 年前

    我定义了一个 <ui:param>

    <ui:composition template="/WEB-INF/templates/ui.xhtml"
      xmlns="http://www.w3.org/1999/xhtml"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:ui="http://java.sun.com/jsf/facelets"
    >
      <ui:param name="title" value="OnAir WebDemo" />
      ...
    </ui:composition>
    

    ui.xhtml 模板我有:

    <html
      xmlns="http://www.w3.org/1999/xhtml"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:c="http://java.sun.com/jstl/core"
    >
      <c:if test="#{not empty title}">
        <h1>#{title}</h1>
      </c:if>
    </html>
    

    然而, <c:if test> 似乎总是在评估 true ,如果 < 未指定。我如何更改代码以便 < false <用户界面:参数>

    2 回复  |  直到 10 年前
        1
  •  43
  •   Community Egal    4 年前

    XML命名空间无效。应该是的

    xmlns:c="http://java.sun.com/jsp/jstl/core"
    

    /jsp 加入URI!没有的那个 /jsp协议 仅适用于facelets1.x for jsf1.x。如果您在webbrowser中检查了生成的HTML输出,您应该也注意到 <c:if> 在HTML输出中未分析。


    也就是说,您应该更喜欢JSF组件而不是JSTL标记,除非在技术上不可能(例如,当您实际想要控制 看风景,不是吗 致使 h:panelGroup 当你发现自己是一个很好的候选人,然而 ui:fragment 是一个更好的选择,因为它有较少的开销。

    <ui:fragment rendered="#{not empty title}">
        <h1>#{title}</h1>
    </ui:fragment>
    

    <ui:fragment> 初始jsf2.0版本的标记定义文件,Netbeans会突然发现该标记不支持 rendered 属性,但这是不真实的。它当然支持这一点。它已经在jsf2.1标记定义中修复。

    另请参见:

        2
  •  3
  •   Dejell    14 年前

    我曾经 rendered

    <h:panelGroup rendered="#{title!=null}">
    
                    <h1>#{title}</h1>
    
            </h:panelGroup>