将源HTML元素传递给PrimeFaces p:ajax的oncomplete函数

A.C*_*oun 2 javascript ajax primefaces jsf-2

我想将源HTML元素作为参数传递给JavaScript的回调函数<p:ajax oncomplete>.我尝试过this通常可以使用的传递方式onclick:

<p:ajax ... oncomplete="callbackFunction(this)" />
Run Code Online (Sandbox Code Playgroud)

它不起作用.这似乎是一个不同的对象.

我怎样才能做到这一点?

Bal*_*usC 7

在上下文中oncomplete,this代表PrimeFaces ajax对象,它实际上包含很多信息.您可以通过检查调试器中的对象,或通过传递给console.log自动漂亮的JS对象来轻松找到它.

function callbackFunction(arg) {
    console.log(arg);
}
Run Code Online (Sandbox Code Playgroud)

的情况下 ..

<h:form id="formId">
    <h:commandLink id="linkId" value="test">
        <p:ajax oncomplete="callbackFunction(this)" />
    </h:commandLink>
</h:form>
Run Code Online (Sandbox Code Playgroud)

..它在控制台中看起来像这样(按F12到达那里):

accepts: Object
async: true
beforeSend: (w,i)
cache: false
complete: (w,i)
contentType: "application/x-www-form-urlencoded; charset=UTF-8"
contents: Object
converters: Object
crossDomain: false
data: "javax.faces.partial.ajax=true&javax.faces.source=formId%3AlinkId&javax.faces.partial.execute=formId%3AlinkId&javax.faces.behavior.event=action&javax.faces.partial.event=click&formId=formId&javax.faces.ViewState=-4870787666399983047%3A-2006040112896840046"
dataType: "xml"
dataTypes: Array[2]
error: (x,i,w)
flatOptions: Object
global: false
hasContent: true
isLocal: false
jsonp: "callback"
jsonpCallback: ()
portletForms: null
processData: true
responseFields: Object
source: a#formId:linkId
success: (x,i,y)
type: "POST"
url: "/playground/test"
xhr: bD()
__proto__: Object
Run Code Online (Sandbox Code Playgroud)

如果您仔细观察,该source物业是您最终需要的.

所以,只需改变你的电话:

<p:ajax ... oncomplete="callbackFunction(this.source)" />
Run Code Online (Sandbox Code Playgroud)