【问题标题】:Conditional rendering of f:param in JSFJSF 中 f:param 的条件渲染
【发布时间】:2015-06-01 07:42:26
【问题描述】:

我正在使用<h:outputLink>,如下所示。

<c:set var="cid" value="1"/>
<c:set var="sid" value="2"/>

<h:outputLink value="Test.jsf">
    <h:outputText value="Link"/>

    <f:param name="cid" value="#{cid}"/>
    <f:param name="sid" value="#{sid}"/>
</h:outputLink>

这只是一个例子。两个查询字符串参数都是动态的。所以,这里使用的&lt;c:set&gt;只是为了演示。

在任何时候,都可能存在任何一个、两个或一个参数。如果只有一个或一个都不存在,则参数/s 会不必要地附加到不应发生的 URL 上。防止将不必要的查询字符串参数附加到 URL 需要有条件呈现 &lt;f:param&gt;

JSTL &lt;c:if&gt; 如下

<c:if test="${not empty cid}">
    <f:param name="cid" value="#{cid}"/>
</c:if>

没用。

如何在&lt;h:outputLink&gt; 内有条件地渲染&lt;f:param&gt;

【问题讨论】:

    标签: jsf jsf-2.2


    【解决方案1】:

    &lt;f:param&gt; 有一个 disable (not disabled!) attribute 用于此目的。

    <f:param name="cid" value="#{cid}" disable="#{empty cid}" />
    <f:param name="sid" value="#{sid}" disable="#{empty sid}" />
    

    请注意,这在早于 2.1.15 的 Mojarra 版本中存在错误,因为他们将实际的 UIParameter 属性拼写为 disble 而不是 disable。另见issue 2312

    对于&lt;c:if&gt; 方法,只有在视图构建期间#{cid}#{sid} 可用时才有效。换句话说,如果它们仅在视图渲染期间可用,它将失败,例如当它们依赖于转发器组件的var 时。另见JSTL in JSF2 Facelets... makes sense?

    另见:

    【讨论】:

      【解决方案2】:

      你不喜欢这种解决方案吗?

      <f:param name="#{cid == null ? '' : 'cid'}" value="#{cid}"/>
      <f:param name="#{sid == null ? '' : 'sid'}" value="#{sid}"/>
      

      【讨论】:

        猜你喜欢
        • 2012-11-28
        • 2012-05-10
        • 1970-01-01
        • 2012-08-31
        • 2013-01-24
        • 2011-07-12
        • 2014-01-17
        • 1970-01-01
        相关资源
        最近更新 更多