【问题标题】:Conditionally rendering p:commandLinks有条件地渲染 p:commandLinks
【发布时间】:2014-11-26 19:56:24
【问题描述】:

我正在实施一些搜索过滤器。 <p:commandLink> 显示在每个搜索组件旁边(<p:inputText><p:selectOneMenu> 等)。

<p:inputText id="text" value="#{bean.text}" required="true"/>

<h:panelGroup id="panelGroup">
    <p:commandLink process="@this text" update="panelGroup text" actionListener="#{bean.action}" rendered="#{empty param['form:text']}">
        <h:outputText styleClass="ui-icon ui-icon-search"/>
    </p:commandLink>

    <p:commandLink process="@this" update="panelGroup text" actionListener="#{bean.resetAction}" rendered="#{not empty param['form:text']}">
        <h:outputText styleClass="ui-icon ui-icon-trash"/>
        <p:resetInput target="text"/>
    </p:commandLink>
</h:panelGroup>

当单击第一个&lt;p:commandLink&gt;(带有搜索图标的那个)并且给定的&lt;p:inputText&gt; 不为空时,该链接预计会消失,而另一个链接(带有垃圾桶图标的那个)预计会消失渲染(反之亦然)。

会发生这种情况,但第一个链接 (actionListener="#{bean.action}") 指示的操作侦听器未调用,因为该链接是根据 &lt;p:inputText&gt; 的值呈现的。 rendered="#{empty param['form:text']}" 负责防止监听器被调用。

此外,当带有垃圾桶图标的链接出现时,如果单击它但它没有消失,它会重置输入组件。只有再次单击它才会消失(然后出现搜索)。


如何正确处理这种情况?如果没有违反验证/转换并单击搜索链接,则该链接应消失并呈现垃圾链接。

反之,当垃圾链接出现时,如果被点击,它应该重置&lt;p:inputText&gt;然后消失,这样搜索链接才能被渲染。

【问题讨论】:

    标签: jsf primefaces jsf-2.2 commandlink


    【解决方案1】:

    您实际上只想在调用该操作之后 切换渲染。 rendered 属性在应用请求值阶段也被遵守,此时动作事件即将排队。如果它评估false,则操作事件不会排队,因此在调用应用程序阶段不会调用操作。

    最好直接检查模型值。该操作在模型值设置之前排队。而且,当对模型值进行转换/验证时,这也应该会更好。

    <p:inputText ... value="#{bean.text}" />
    <p:commandLink ... rendered="#{empty bean.text}" />
    <p:commandLink ... rendered="#{not empty bean.text}" />
    

    【讨论】:

      猜你喜欢
      • 2018-06-30
      • 2012-11-20
      • 2019-03-24
      • 2013-05-01
      • 1970-01-01
      • 2018-09-13
      • 2019-02-18
      • 1970-01-01
      • 2021-11-19
      相关资源
      最近更新 更多