2011-11-20 65 views
1

为了减少状态,我试图减少我的网页上的命令按钮的数量(我有大量的commandButtons显示在20个项目(6 * 20 = 120 commandButtons))。因此,我试图找出一种方法,通过javascript,我可以通过参数&调用ManagedBean控制器类中的操作方法。有没有什么办法从javascript &传递动作方法传递参数?通过javascript调用控制器托管bean中的操作方法

回答

3

RichFaces的3.2.0.GA和XHTML作为标记

您可以使用JavaScript来调用A4J:JS方法,它inturn从托管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*/ 
    } 
} 

否则,您可以通过使用动作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> 

的绕过这个隐藏变量在后一种情况的动作PARAM可能会设置只有在管理bean完成之后,在这种情况下,您可以使用Action atribute来调用您的操作方法,而不是操作侦听器。 这将帮助您设置参数,然后调用操作方法。

<a4j:jsFunction name="actionListenerMethod" 
    action="#{yourManagedBean.actionMethod}" 
     oncomplete="scriptOnComplete();"> 
     <a4j:actionparam name="param1" 
      assignTo="#{yourManagedBean.yourValue}" /> 
</a4j:jsFunction> 
相关问题