为了减少状态,我试图减少网页上的commandButtons的数量。(我在20个项目的长列表中显示了大量的commandButtons(6 * 20 = 120 commandButtons))。因此,我试图找出一种方法,通过javascript我可以传递参数&调用ManagedBean控制器类中的action方法。有没有办法从javascript&调用动作方法?传递参数?
答案 0 :(得分:3)
Richfaces 3.2.0.GA和XHTML作为标记
您可以使用javascript调用a4j:js方法,该方法从托管bean调用操作方法。 您需要传递的参数可以设置为隐藏变量,在设置时将该值设置为bean中的java变量。
<script>
function onButtonClick(){
$("#yourValue").val("value");
actionListenerMethod();
}
</script>
<a4j:jsFunction name="actionListenerMethod"
actionListener="#{yourManagedBean.actionMethod}"
oncomplete="scriptOnComplete();">
</a4j:jsFunction>
<h:inputHidden id="yourValue"
value="#{yourManagedBean.yourValue}" />
托管bean:
public void actionMethod(ActionEvent event){
if(yourValue == "something"){
/*your action goes here*/
}
}
否则,您可以使用action param
绕过此隐藏变量<script>
function onButtonClick(){
actionListenerMethod("value");
}
</script>
<a4j:jsFunction name="actionListenerMethod"
actionListener="#{yourManagedBean.actionMethod}"
oncomplete="scriptOnComplete();">
<a4j:actionparam name="param1"
assignTo="#{yourManagedBean.yourValue}" />
</a4j:jsFunction>
在后一种情况下,只有在manged bean完成后才能设置action param,在这种情况下,你可以使用Action atribute来调用你的action方法而不是动作监听器。 这将帮助您设置参数,然后调用操作方法。
<a4j:jsFunction name="actionListenerMethod"
action="#{yourManagedBean.actionMethod}"
oncomplete="scriptOnComplete();">
<a4j:actionparam name="param1"
assignTo="#{yourManagedBean.yourValue}" />
</a4j:jsFunction>