我正在使用<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>
这只是一个例子。两个查询字符串参数都是动态的。所以,这里使用的<c:set>
只是为了演示。
在任何时候,可能存在一个,两个或没有参数。在这种情况下,如果只有一个或不存在,则参数/ s被不必要地附加到不应发生的URL。防止将不必要的查询字符串参数附加到URL需要条件呈现<f:param>
。
JSTL <c:if>
,如下所示
<c:if test="${not empty cid}">
<f:param name="cid" value="#{cid}"/>
</c:if>
没用。
如何才能在<f:param>
内有条件地呈现<h:outputLink>
?
答案 0 :(得分:16)
<f:param>
有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。
对于<c:if>
方法,只有在视图构建期间#{cid}
和#{sid}
可用时才会有效。换句话说,如果它们仅在视图渲染时间期间可用,则它将失败,例如,当他们依赖于转发器组件的var
时。另请参阅JSTL in JSF2 Facelets... makes sense?
答案 1 :(得分:2)
你不喜欢这种解决方案吗?
<f:param name="#{cid == null ? '' : 'cid'}" value="#{cid}"/>
<f:param name="#{sid == null ? '' : 'sid'}" value="#{sid}"/>