将 p:dataTable 的当前选定行传递给 p:ajax oncomplete 中的 JavaScript 函数

Pass current selected row of p:dataTable to JavaScript function in p:ajax oncomplete

如何将当前选定的行传递给 <p:ajax oncomplete> 中的 JavaScript 函数?

<p:dataTable value="#{bolt.sites}" var="bolt" selection="#{bolt.selectedSite}" ...>
    <p:ajax event="rowSelect" oncomplete="alert(#{bolt.selectedSite.name});" />

我都试过了:#{bolt.selectedSite.name}#{bolt.name}

oncomplete 属性中的 EL 表达式在调用该操作后未被评估。在呈现包含 ajax 调用逻辑的 JavaScript 代码时,它们已经被评估。

你最好的选择是添加一个侦听器方法,该方法通过 RequestContext#addCallbackParam() 添加名称作为回调参数,然后它将作为 属性 中隐式 args 对象的 属性 oncomplete上下文。

<p:ajax ... listener="#{bean.select}" oncomplete="alert(args.name)" />
public void select() {
    String name = selectedSite.getName();
    RequestContext.getCurrentInstance().addCallbackParam("name", name);
}

与具体问题无关,您在最初的 JavaScript 尝试中遇到语法错误。 属性 名称“名称”表明它是一个字符串。在 JavaScript 中,所有字符串值都应该用引号引起来。所以你的假想解决方案是 oncomplete="alert('#{bolt.selectedSite.name}');"