我正试图使用<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)}"/>