我找不到如何用javascript直接调用bean的方法,但是这里有一个关于从javascript调用f:ajax-declaration的技巧:
1)创建一个隐藏表单,其中包含要发送到服务器的所有数据的字段。也包括ah:commandButton:
<h:form id="hiddenForm" > <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的字段中。
这是我的情况的简化,但应该可以。不过,仍在寻找更方便的方法。