Передача параметров в метод a4j: ajax - PullRequest
4 голосов
/ 28 сентября 2011

Я пытаюсь использовать <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 Ответ

3 голосов
/ 28 сентября 2011

Вам нужен атрибут listener вместо атрибута execute. Атрибут execute должен указывать на набор клиентских идентификаторов, которые должны быть отправлены (по умолчанию @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 не был тесно связан с бобом colorCode.

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