JSF中f:param的条件渲染

Tin*_*iny 9 jsf jsf-2.2

我使用<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>
Run Code Online (Sandbox Code Playgroud)

这只是一个例子.两个查询字符串参数都是动态的.因此,<c:set>这里使用的只是为了演示.

在任何时候,可以存在一个,两个或不存在任何参数.在这种情况下,如果只有一个或不存在,则参数/ s被不必要地附加到不应发生的URL.防止将不必要的查询字符串参数附加到URL需要条件呈现<f:param>.

JSTL <c:if>如下

<c:if test="${not empty cid}">
    <f:param name="cid" value="#{cid}"/>
</c:if>
Run Code Online (Sandbox Code Playgroud)

不工作.

怎么能有条件地渲染<f:param>内部<h:outputLink>

Bal*_*usC 17

<f:param>有一个disable(不disabled!)属性为宗旨.

<f:param name="cid" value="#{cid}" disable="#{empty cid}" />
<f:param name="sid" value="#{sid}" disable="#{empty sid}" />
Run Code Online (Sandbox Code Playgroud)

请注意,这在早于2.1.15的Mojarra版本中有一个错误,因为它们错误地将实际UIParameter属性disble改为disable.另见问题2312.

至于该<c:if>方法,只有在视图构建期间可用#{cid}且该方法才有效#{sid}.换句话说,如果它们仅在视图渲染时间期间可用,例如当它们依赖于var转发器组件时,它将失败.另请参阅JSF2 Facelets中的JSTL ......有意义吗?

也可以看看: