Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 如何从primefaces中的javascript触发组件刷新?_Jsf_Jsf 2_Primefaces - Fatal编程技术网

Jsf 如何从primefaces中的javascript触发组件刷新?

Jsf 如何从primefaces中的javascript触发组件刷新?,jsf,jsf-2,primefaces,Jsf,Jsf 2,Primefaces,是否可以从javascript更新PrimeFaces组件,以便强制刷新 我在对话框中使用此按钮进行ajax保存调用。 我已将自定义javascript附加到oncomplete事件上 <p:growl life="1500" id="showmessage"/> <p:dialog id="addMemberDialog" widgetVar="addMemberDlg"> <!-- More Code --> <p:commandBu

是否可以从javascript更新PrimeFaces组件,以便强制刷新

我在对话框中使用此按钮进行ajax保存调用。 我已将自定义javascript附加到oncomplete事件上

<p:growl life="1500" id="showmessage"/>
<p:dialog id="addMemberDialog" widgetVar="addMemberDlg">
    <!-- More Code -->
    <p:commandButton value="Save"
        actionListener="#{memberManagedBean.save}"
        oncomplete="handleSaveNewMember(xhr, status, args)"
        update=":memberListForm:membersTable createupdateform "
        process="@form" />
</p:dialog>
我的问题是,如何对UI排序,以便在咆哮组件显示meesage之前,我应该先隐藏对话框

function handleSaveNewMember(xhr, status, args) {
    addMemberDlg.hide();
    //update the growl after the dialog was hidden?
}
发生的情况是,咆哮组件同时显示在对话框旁边


谢谢。

您可以随时执行类似操作(从“保存按钮更新”属性中删除showmessage id)


函数handleSaveNewMember(xhr、状态、参数){
...
jQuery(“#myBtn”)。单击();
}
编辑
但无论如何,在当前代码中,对话框不是在grwol更新的同时关闭吗?

为什么不能将p:dialog放在中。像

< h:panelGroup id="addUser" rendered = "boolean value " >
    < p:dialog id="addMemberDialog" widgetVar="addMemberDlg" >
        <!-- More Code -->
        < p:commandButton value="Save" actionListener="#{memberManagedBean.createOrUpdate}"
                oncomplete="handleSaveNewMember(xhr, status, args)"
                update=":memberListForm:membersTable createupdateform :showmessage :addUser"
                process="@form" />
    < /p:dialog >
< /h:panelGroup>





应在保存方法中设置的布尔值。在保存方法中将其设置为false时,更新时将不会显示。所以只会显示咆哮信息。但是在调用这个save方法之前,这个布尔值设置为true

您可以使用PrimeFaces'进行此操作


将作为



然而,在这种特殊情况下,有一种更简单的方法。将
autoUpdate
属性设置为
true


它将在每次ajax请求时自动更新自身。如果您的组件实际上不支持它,那么您可以始终将其包装在一个也支持该属性的


...
我的建议:

  • actionListener
    属性一起使用。此属性调用包含
    FacesContext.addMessage
    code的支持bean方法,方法如下:
  • 接下来,在
    handleSaveNewMember
    脚本中,在
    addMemberDlg.hide()之后调用
    remoteCommand
    name
    属性这样:
    。然后,
    函数handleSaveNewMember(xhr,status,args){addMemberDlg.hide();testScript();}
  • update
    属性添加到
    remoteCommand
    指向咆哮组件:
  • 您的
    命令按钮
    正常
  • 这对我有用


    问候。

    您可以使用名为p:remotecommand的PrimeFaces元素。此元素将执行一个操作(例如,调用bean方法)并在该操作之后执行更新

    这篇文章中有一个例子。

    PrimeFaces有一个例子。您可以使用
    PrimeFaces.ajax.Request.handle(cfg)
    ,或较短版本
    PrimeFaces.ab(cfg)
    ,通过使用config对象的
    update
    属性触发更新

    您可能需要根据自己的需要设置
    过程
    属性。如果不需要处理任何内容,请将其设置为
    @none

    然后,您需要设置
    source
    属性。可以使用EL:
    {component.clientId}
    将其设置为当前组件

    把这些放在一起,你会得到:

    PrimeFaces.ab({source:'{component.clientId}',进程:'@none',更新:'clientedtoupdate'})
    
    我创建了一个用于将其简化为
    {my:ajaxUpdate('clientIdToUpdate')}

    公共静态字符串ajaxUpdate(最终字符串clientId){
    返回“PrimeFaces.ab({source:'”
    +UIComponent.getCurrentComponent(Faces.getContext()).getClientId()
    +“,进程:'@none',更新:”
    +客户
    + "'})";
    }
    
    这将减少(例如):

    
    ...
    
    致:

    
    
    您的意思是需要一个“虚拟”按钮,而这不能通过一些javascript api实现吗?如果是这样的话,我想我应该只关注这个链接。既然一切都是ajaxified的,那么我应该触发来自客户端本身的消息。我的理解正确吗?但在您的情况下,您希望从服务器发送消息,而不是从js。。。关于我的方法。。。我想还有其他方法。。。但这就是我从js触发jsf元素“重新呈现”的方式:)哦,你说得对。我已从更新列表中删除showmessage,因为这将自动显示facesmessage。让我试着进一步解释一下,单击保存按钮,我已经将facesmessage排队。由于咆哮的自动更新为false,因此消息不会显示。这就是oncomplete javascript函数的目的。发生的情况是,我将首先隐藏对话框,然后我希望咆哮刷新并显示我的排队消息。这有可能吗?我唯一能想到的方法就是我提出的方法。。。但无论如何,在您当前的代码中,对话框不是在更新grwol的同时关闭的吗?您必须在单击按钮时显示对话框。您是否尝试从该按钮而不是对话框中的“保存”按钮更新咆哮?答案通常应包含一些上下文,而不仅仅是链接。这更适合作为对该问题的评论。看:谢谢你的建议。我编辑了评论以实现这一功能。仅供参考,如果读者使用的是侏罗纪版本的PF,growl的自动更新仅在3.0及以上版本中提供。而
    autoUpdate=“…”
    属性在6.2 elite版本中被弃用,取而代之的是<h:commandButton style="display:none" id="myBtn" > <f:ajax render=":showmessage"/> </h:commandButton> function handleSaveNewMember(xhr, status, args) { ... jQuery("#myBtn").click(); }
    < h:panelGroup id="addUser" rendered = "boolean value " >
        < p:dialog id="addMemberDialog" widgetVar="addMemberDlg" >
            <!-- More Code -->
            < p:commandButton value="Save" actionListener="#{memberManagedBean.createOrUpdate}"
                    oncomplete="handleSaveNewMember(xhr, status, args)"
                    update=":memberListForm:membersTable createupdateform :showmessage :addUser"
                    process="@form" />
        < /p:dialog >
    < /h:panelGroup>