通过javascript调用控制器托管bean中的操作方法

时间:2011-11-20 20:39:58

标签: jsf

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

1 个答案:

答案 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>