将参数传递给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作为执行的一部分,它是空白的;如果我将colorClass.color替换为文字

<a4j:ajax event="change" render="colorCode" 
    execute="#{myChoices.getColorCode(colorClass,'green')}"/>
方法被调用,找到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,因为您也可以在getColorCode()方法中执行colorClass.getColor()。只要通过其中一个就足够了。传递colorClass.color是可取的,这样您的myChoices bean就不会与colorCode bean紧密耦合。

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

相关内容

  • 没有找到相关文章

最新更新