2011-09-28 4 views
4

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

Как я могу «захватить» значение только что ввели, так что я могу передать его в качестве параметра к методу?

ответ

3

Атрибут listener вместо execute. Атрибут execute должен указывать на коллекцию идентификаторов клиентов, которые должны быть отправлены (по умолчанию это @this в <f:ajax> и @form в <a4j:ajax>). Однако в вашем конкретном случае он возвращает void и сохраняет execute пустым. Атрибут listener должен указывать на метод прослушивателя компонента. Исправить это соответственно:

<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)}"/> 
+0

Большое спасибо, это сделали! – user969743

+0

Добро пожаловать. – BalusC

Смежные вопросы