我正在尝试使用<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并重新绘制表单
如何“抓取”刚输入的值,以便将其作为参数传递给方法?
答案 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)}"/>