jsf - f :param in JSF的条件渲染

标签 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>

这只是一个例子。这两个查询字符串参数都是动态的。因此,此处使用的<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?
也可以看看:
  • f:param tag attribute 'disable' is not work
  • 关于jsf - f :param in JSF的条件渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25846482/

    相关文章:

    java - 按下目标为 'frozen' 的 commandLink 后,Chrome 中的页面变为 ="_blank"

    java - ManagedBean和xhtml方法调用的设计策略

    java - 确定 JSF 容器表单的 ID

    deployment - 无法在 WebLogic 上的 EAR 中部署 WAR

    java - 检索 jsf/primefaces 支持 bean 中的 url 路径

    css - 禁止子元素从父元素继承样式

    java - 混合 jsp 和 jsf

    java - 将值从表单提交到方法,无需在 BackingBean 中使用变量

    java - 在 Java 中完成 mysql 查询之前停止执行 Java 代码?

    jsf - 有条件渲染 p :commandLinks