【问题标题】:growl message already showing even before action [duplicate]甚至在行动之前就已经显示咆哮消息[重复]
【发布时间】:2020-11-25 05:21:57
【问题描述】:

您好,我正在尝试复制到剪贴板按钮,是的,该按钮有效。只是真的很奇怪,当我打开页面时,消息咆哮已经弹出。相反,我希望它仅在“单击”我的命令链接时弹出。无论如何,我想向您展示我的 Bean 和索引,以便更好地了解我做错了什么......

public void successListener(final ClipboardSuccessEvent successEvent) {
        final FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Success",
                "Component id: " + successEvent.getComponent().getId() + " Action: " + successEvent.getAction()
                + " Text: " + successEvent.getText());
        FacesContext.getCurrentInstance().addMessage(null, msg);
        FacesContext context = FacesContext.getCurrentInstance();
        context.addMessage(null, new FacesMessage("Link Halaman", "Berhasil Di Copy"));
    }
    
    public String messageGrowl(){

        FacesContext context = FacesContext.getCurrentInstance();

        context.addMessage(null, new FacesMessage("Link Copied Successfully"  + ""));
        return null;

    }

    public void errorListener(final ClipboardErrorEvent errorEvent) {
        final FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error",
                "Component id: " + errorEvent.getComponent().getId() + " Action: " + errorEvent.getAction());
        FacesContext.getCurrentInstance().addMessage(null, msg);
    }

这是我的 index.html :

<p:commandLink id="share" onclick="#{homeMBean.messageGrowl()}">
                                            <i class="fa fa-share-alt" style="color: black"/>
                                            <h:outputText value="&#160;Share" escape="false" style="color: black;"/>
                                        </p:commandLink>
                                        <pe:clipboard id="clipAjax" trigger="share" action="copy" text="http://localhost:8082/index.xhtml">
                                            <p:ajax event="success" listener="#{homeMBean.successListener}" update="@form"/>
                                            <p:ajax event="error" listener="#{homeMBean.errorListener}" update="@form"/>
                                        </pe:clipboard>
<p:growl id="growled" showDetail="true" sticky="true" /> 

变成这样,打开页面时已经弹出了咆哮的消息。也许有人遇到过同样的问题?或者也许有人有任何想法?太感谢了 :)

【问题讨论】:

  • 您能否使用 PrimeFaces 测试创建一个可重现的小样本,以便我对其进行调试? github.com/primefaces/primefaces-test
  • 我不认为我能做到,我非常抱歉,但我在我的代码中尝试了 2 种方法,successListener 和 messageGrowl。当我使用successListener时,当我打开页面时没有出现咆哮,当我点击我的共享命令链接时它也没有咆哮消息。

标签: jsf primefaces growl


【解决方案1】:

onClick 属性中的表达式#{homeMBean.messageGrowl()} 会在页面被渲染并且调用homeMBean.messageGrowl() 的结果被设置为该属性的值时进行评估。 我猜您的意图不是在呈现页面时调用方法 homeMBean.messageGrowl(),而是在 onclick 事件发生时调用。 您应该使用 action 属性而不是 onclick。

onclick 属性用于指定要调用的一些客户端 javascript 代码。

属性操作旨在指定后端中使用ajax调用执行的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-25
    • 1970-01-01
    • 1970-01-01
    • 2014-10-19
    • 2019-10-22
    相关资源
    最近更新 更多