JSF 中 f:param 的条件渲染
Posted
技术标签:
【中文标题】JSF 中 f:param 的条件渲染【英文标题】:Conditional rendering of f:param in JSF 【发布时间】:2014-11-08 21:17:46 【问题描述】:我正在使用<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>
没用。
如何在<h:outputLink>
内有条件地渲染<f:param>
?
【问题讨论】:
【参考方案1】:<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?
另见:
f:param tag attribute 'disable' is not work【讨论】:
【参考方案2】:你不喜欢这种解决方案吗?
<f:param name="#cid == null ? '' : 'cid'" value="#cid"/>
<f:param name="#sid == null ? '' : 'sid'" value="#sid"/>
【讨论】:
以上是关于JSF 中 f:param 的条件渲染的主要内容,如果未能解决你的问题,请参考以下文章