通过JavaScript函数调用p:remoteCommand,通过;“未完成”;处理者
这个问题纯粹是基于之前提出的问题()提出的,但这个问题完全被Java EE 7 WebSockets API搞砸了,该API试图展示实际的方法/场景,现在很难根据通过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()”依次与一个。 } $(文件)。准备就绪(测试); 函
得到任何答案
下面给出一段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)" />