jsf - 有条件渲染 p :commandLinks

标签 jsf primefaces jsf-2.2 commandlink

我正在实现一些搜索过滤器。一个<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>

当第一个<p:commandLink> (带有搜索图标的那个)被单击并给出 <p:inputText>不为空,则该链接预计会消失,并且预计会呈现另一个链接(带有垃圾桶图标的链接)(反之亦然)。

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

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


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

相反,当垃圾链接出现并且点击它时,它应该重置 <p:inputText>然后消失,以便可以呈现搜索链接。

最佳答案

您实际上只想在调用操作之后切换渲染。也就是说,在应用请求值阶段,当操作事件即将排队时,也会遵守 rendered 属性。如果其计算结果为 false,则操作事件不会排队,因此在调用应用程序阶段不会调用该操作。

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

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

关于jsf - 有条件渲染 p :commandLinks,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26150466/

相关文章:

java - Seam 框架中的业务对象建模模式?

jsf - java.lang.IllegalArgumentException : javax. 面.lifecycle.ClientWindowFactory

javascript - 如何将 JSON 对象从 Java/Prime Faces 传递到 GOJS javascript 文件

java - 重新部署后使用 JSF 2 防止 ViewExpiredException

jsf - 将 View 范围的 bean 注入(inject)另一个 View 范围的 bean

java - 尝试嵌套 JSF 表达式字符串

css - 如何更改 primefaces growl 组件的 z-index?

css - 如何更改 Primefaces/jqPlot 折线图的标签颜色?

java - primefaces 数据表中的单选按钮和复选框

twitter-bootstrap-3 - 在 webjars 和 jsf2.2 中使用 bootstrap 3 glyphicons