将参数传递给a4j:ajax方法

问题描述:

我正尝试使用<a4j:ajax>来提供刚刚在表单中输入值的方法;将参数传递给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作为执行的一部分时,它是空白的; 如果我用文字

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

方法替代colorClass.color被调用时,找到的ColorCode和重绘形式

我怎么能“抢”刚输入的值,这样我可以把它作为一个参数该方法?

您需要listener属性而不是execute属性。 execute属性应该指向要提交的客户端ID集合(缺省值为<f:ajax>中的@this<a4j:ajax>中的@form)。但在您的特定情况下,它将返回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)}"/> 
+0

非常感谢,这是它! – user969743

+0

不客气。 – BalusC