JSF f: ajax вмешивается в значение ManagedBean - PullRequest
0 голосов
/ 29 августа 2018

Я использую icefaces и таблицу данных jquery, полученную из JSON на стороне клиента, без данных на стороне сервера. У меня есть командная кнопка, которая используется для добавления всех сотрудников, выбранных в таблице данных.

  <h:commandButton  styleClass="xButton" id="xxButton" value="AddSelected action="#{xyzBean.addSelected}" >

         <f:ajax execute ="abcForm" event="action"   onevent="refreshDt"/>
   </h:commandButton>

И у меня есть метод Jquery, связывающий щелчок по этой кнопке, который вычисляет выбранные строки из таблицы и устанавливает для них скрытое значение, которое, в свою очередь, привязано к свойству вспомогательного компонента.

Метод выглядит следующим образом

    $(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, который обновляет dataTable.

      /*<![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, значение empList свойства управляемого компонента всегда будет пустым.

То, чему я научился до сих пор от отладки, 1. javascript метод refreshDt вызывается перед обработчиком действия базового компонента xyzBean.addSelected, а затем связывается с jquery onclick (который фактически выбирает и присваивает значение empList) 2. Поэтому я явно устанавливаю empList снова в методе refreshDt (в разделе begin) Даже тогда в компоненте поддержки значение empList пусто

Также, если я удаляю f: ajax, тогда все работает отлично, но тогда я не могу обновить dataTable. Любая помощь приветствуется. Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...