我正在使用<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>
只是为了演示。在任何时候,任何一个,两个参数都可能不存在。如果仅存在其中之一或不存在,则不必要地将参数附加到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>
成为可能?
最佳答案
<f:param>
为此具有一个 disable
(not disabled
!) attribute。
<f:param name="cid" value="#{cid}" disable="#{empty cid}" />
<f:param name="sid" value="#{sid}" disable="#{empty sid}" />
请注意,这在Mojarra 2.1.15之前的版本中存在一个错误,因为它们将实际的UIParameter
属性打错了disble
而不是disable
。另请参见issue 2312。对于
<c:if>
方法,只有在 View 构建期间#{cid}
和#{sid}
可用的情况下,该方法才有效。换句话说,如果它们仅在 View 渲染期间可用,则失败。当它们取决于中继器组件的var
时。另请参阅JSTL in JSF2 Facelets... makes sense?也可以看看:
关于jsf - f :param in JSF的条件渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25846482/