Я не мог выяснить, как напрямую вызывать bean-компоненты с помощью javascript, но здесь есть хитрость при вызове f: ajax-декларации из javascript:
1) Создание скрытой формы с полями для всех данныхчто вы хотите отправить на сервер.Включите также ah: commandButton:
<h:form id="hiddenForm" style="display: none;">
<h:inputHidden id="someData" value="#{someBean.someData}" />
<h:commandButton id="invisibleClickTarget">
<f:ajax execute="@form" listener="#{someBean.myCoolActionOnServer()}" />
</h:commandButton>
</h:form>
Как обычно, атрибут listener
, в данном случае #{someBean.myCoolActionOnServer()}
, относится к методу, который вы хотите выполнить на сервере.
2) В какой-то другой кнопке используйте onclick
для вызова вашего специального javascript И нажмите кнопку триггера через javascript:
<h:commandButton value="Click me" onclick="populateTheForm('hiddenForm'); document.getElementById('hiddenForm:invisibleClickTarget').click(); return false;" />
populateTheForm()
должен фактически заполнить данные в поля hiddenForm.
Это упрощение моего случая, но оно должно работать.Тем не менее, все еще ищу более удобный подход.