JSF f:ajax干扰ManagedBean的值

时间:2018-08-29 19:01:38

标签: jsf jsf-2 datatables

我正在使用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。 任何帮助将非常感激。谢谢

0 个答案:

没有答案