将参数传递给a4j:ajax方法

时间:2011-09-28 19:21:44

标签: jsf jsf-2 ajax4jsf

我正在尝试使用<a4j:ajax>为表单中输入的值提供方法;

<h:selectOneMenu id="aa" value="#{colorClass.color}">
    <f:selectItems value="#{myChoices.colorOptions}"/>
    <a4j:ajax event="change" render="colorCode" 
        execute="#{myChoices.getColorCode(colorClass,colorClass.color)}"/>
</selectOneMenu>

正确选择表单上的颜色;

我的问题是,当我作为执行的一部分传递colorClass.color时,它是空白的; 如果我用文字

替换colorClass.color
<a4j:ajax event="change" render="colorCode" 
    execute="#{myChoices.getColorCode(colorClass,'green')}"/>

调用该方法,找到colorCode并重新绘制表单

如何“抓取”刚输入的值,以便将其作为参数传递给方法?

1 个答案:

答案 0 :(得分:3)

您需要listener属性而不是execute属性。 execute属性应指向要提交的客户端ID集合(默认为@this中的<f:ajax>@form中的<a4j:ajax>。但是,在您的特定情况下,它会返回void并保持execute为空。 listener属性应该指向bean动作侦听器方法。相应地修复它:

<a4j:ajax event="change" render="colorCode" 
    listener="#{myChoices.getColorCode(colorClass,colorClass.color)}"/>

请注意,colorClass参数在此处似乎是多余的,或者至少是colorClass.color,因为您也可以在colorClass.getColor()方法中执行getColorCode()。只要通过其中一个就足够了。传递colorClass.color会更好,这样你的myChoices bean就不会与colorCode bean紧密结合。

<a4j:ajax event="change" render="colorCode" 
    listener="#{myChoices.getColorCode(colorClass.color)}"/>