通过JavaScript函数调用p:remoteCommand,通过;“未完成”;处理者

通过JavaScript函数调用p:remoteCommand,通过;“未完成”;处理者,javascript,jsf,primefaces,parameter-passing,remotecommand,Javascript,Jsf,Primefaces,Parameter Passing,Remotecommand,这个问题纯粹是基于之前提出的问题()提出的,但这个问题完全被Java EE 7 WebSockets API搞砸了,该API试图展示实际的方法/场景,现在很难根据得到任何答案 下面给出一段JavaScript(这只是一个测试场景) 功能测试(){ var message=“myMessage”; 窗口[“myFunction”](); //这被字面解释为JavaScript函数“myFunction()”。 //“myFunction()”依次与一个。 } $(文件)。准备就绪(测试); 函

这个问题纯粹是基于之前提出的问题()提出的,但这个问题完全被Java EE 7 WebSockets API搞砸了,该API试图展示实际的方法/场景,现在很难根据
得到任何答案


下面给出一段JavaScript(这只是一个测试场景)


功能测试(){
var message=“myMessage”;
窗口[“myFunction”]();
//这被字面解释为JavaScript函数“myFunction()”。
//“myFunction()”依次与一个。
}
$(文件)。准备就绪(测试);
函数notifyAll(){
警报(“notifyAll()已调用”);
}
加载页面后,会立即调用
test()
函数,这会导致以下事件触发,进而调用另一个JavaScript函数,即
notifyAll()
,使用一个只会提醒所述消息的
oncomplete
处理程序

<h:form>
    <p:remoteCommand process="@this"
                     name="myFunction"
                     actionListener="#{bean.listener}"
                     oncomplete="notifyAll()"
                     ignoreAutoUpdate="true"/>
</h:form>

假设
test()
函数中的本地JavaScript变量
message
被分配了一条通过WebSockets通道异步接收的JSON消息

notifyAll()
函数必须依次向另一个WebSockets频道发送通知消息(
myMessage
本地到
test()
函数-实际上是以前在
test()
函数中接收到的JSON消息),为简洁起见,在本问题中完全忽略了该消息


是否可以通过给定
oncomplete
处理程序将
test()
函数的
var message=“myMessage”
本地值传递给另一个函数
notifyAll()

消息
声明为全局JavaScript变量可能会压倒WebSocket的功能,因为消息是异步接收的,即在处理
仍在进行/等待完成时,可能会接收到新消息。因此,将
message
声明为全局JavaScript变量不是一个选项


.

我没有看到比从中提取
oncomplete
函数更好的方法

function test() {
    var message = "myMessage";
    myFunction([{name: "message", value: message}]);
}

function notifyAll(data) {
    var message = decodeURIComponent(data.match(/&message=([^&]*)/)[1]);
    // ...
}


data
参数已由
oncomplete
注入JS函数范围,它表示XHR查询字符串。正则表达式从中提取参数。请注意,正则表达式假设参数永远不在查询字符串的开头,这是正确的,因为它总是以JSF/PF特定的参数开头,因此可以保持简单(JS正则表达式在负查找时很棘手)。

数据从何而来?我正在获取未定义的
。正在接收未捕获的引用错误:未定义数据。生成的脚本如下所示:
myFunction=function(){PrimeFaces.ab({s:“j_idt5:j_idt6”,f:“j_idt5”,p:“j_idt5:j_idt6”,iau:true,onco:function(xhr,status,args){notifyAll(data)},pa:arguments[0]}
。抱歉,您应该传入
这个.data
<p:remoteCommand name="myFunction" ... oncomplete="notifyAll(this.data)" />