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

时间:2015-08-13 09:06:12

标签: jsf primefaces datatable jsf-2.2

如何将当前选定的行传递给<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}

1 个答案:

答案 0 :(得分:3)

调用操作后,不会评估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尝试中遇到语法错误。属性名称“name”表示它是一个字符串。在JavaScript中,应引用所有字符串值。所以你的虚构解决方案是oncomplete="alert('#{bolt.selectedSite.name}');"