2016-05-03 2 views
0

У меня есть командная кнопка, которая отправляет некоторую информацию о браузере в бэкэнд-бэк, используя Javascript (путем установки скрытого ввода) в событии клика, а затем выполняет действие AJAX с использованием этих данных. Скрытый ввод корректно обрабатывает данные (проверяется с помощью jQuery в консоли браузера), но когда действие выполняется, эти данные недоступны. Если я нажму на кнопку команды во второй раз, данные доступны. Я считаю, что перед выполнением AJAX я должен обновить скрытое значение ввода на стороне сервера, но я не совсем уверен, как этого добиться.Использование скрытого значения ввода в действии AJAX после его установки

Мой код:

// Javascript function 
getClientSideData: function() { 
    var data = // some string containing browser info 
    $('[id$=hidClientSideData]').val(data); 
} 

// HTML 
<p:commandButton id="btnOK" value="OK" action="#{backingBean.doBtnOK}" onclick="getClientSideData();" process="@(.pghiddenfields)"/> 

<h:panelGroup id="pgHiddenFields" styleClass="pghiddenfields" > 
    <h:inputHidden id="hidClientSideData" 
     value="#{backingBean.clientSideData}" immediate="true" /> 
</h:panelGroup> 

Итак, я хотел бы отправить некоторые строки из кода Javascript (на стороне клиента) для каркасного компонента и использовать его в АЯКСЕ действия на ту же кнопку. Как я могу изменить свой код, чтобы получить эти данные в действии?

ответ

1

Я не совсем понимаю ваше объяснение, как в вашем коде CommandButton не обрабатывается и действие, следовательно, не выполняется (?)

Если я изменяю

getClientSideData: function() { 

в

function getClientSideData() { 

и положить скрипт в h: head, и положить

process="@(.pghiddenfields), @this" 

на кнопке работает так, как вы ожидаете. Также без immediate="true". Я использую фасоль ViewScoped, и все это в одной форме.

Если он все еще не работает для вас, я думаю, есть еще одна проблема, которую вы не показываете.

 Смежные вопросы

  • Нет связанных вопросов^_^