我正在使用icefaces和一个jquery数据表,该数据表是从客户端的JSON派生的,没有服务器端的数据。 我有一个命令按钮,用于添加数据表中选择的所有雇员。
<h:commandButton styleClass="xButton" id="xxButton" value="AddSelected action="#{xyzBean.addSelected}" >
<f:ajax execute ="abcForm" event="action" onevent="refreshDt"/>
</h:commandButton>
我有一个绑定此按钮onclick的Jquery方法,该方法计算从表中选择的行并将其设置为隐藏值,而该隐藏值又绑定到支持bean的属性。
方法如下
$(document.body).on('click','#abcForm\\:xxButton',function() {
var selectedRows =[];
selectedRows = table.rows('.selected-row').data();
//for binding to JSF values
//below sets the value a hidden field empList which is bound to backing bean
var input = document.getElementById("abcForm:empList");
input.value = JSON.stringify(selectedRows );
}
});
隐藏字段
<h:inputHidden id="empList" value="#{xyzBean.empList}" >
<f:converter converterId="employeeConverter" />
</h:inputHidden>
在单击commandButton时,将调用操作方法xyzBean.addSelected,这将执行一些业务逻辑,然后执行此操作。我的f:ajax应该接管并调用刷新数据表的javascript方法refreshDt。
/*<![CDATA[*/
function refreshDt(data) {
if(data.status=='begin'){
var selectedRows =[];
selectedRows = table.rows('.selected-row').data();
//for binding to JSF values
//below sets the value a hidden field empList which is bound to backing bean
var input =
document.getElementById("abcForm:empList");
input.value = JSON.stringify(selectedRows );
}
if(data.status=='success'){
//business logic to refresh data
}
}
/* ]]>*/
但是我在这里面临的怪异问题是,如果我使用f:ajax标记,则托管bean属性empList值始终为空。
到目前为止,我从调试中学到的东西, 1.在支持bean动作处理程序xyzBean.addSelected和jQuery onclick绑定(实际上选择并分配值给empList)之前调用refreshDt javascript方法。 2.因此,我再次在refreshDt方法中显式设置了empList(在开始部分下) 即使那样,在支持bean中,值empList也为空
此外,如果删除f:ajax,则一切运行正常,但无法刷新dataTable。 任何帮助将非常感激。谢谢