2014-01-02 4 views
1

Мы обновляемся с jsf 1.2 до jsf 2. Мы используем apache myfaces 2.1 и rich faces 4.3.Передача параметра a4j: ajax

Ниже приведен код XHTML:

До миграции:

<h:selectBooleanCheckbox id="comp1" value="#{bean.select}"> 
         <a4j:support event="onclick" ajaxSingle="true" actionListener="#{bean.processInput}" reRender="compId"> 
           <f:param name="name" value="paramValue"/> 
          </a4j:support> 
</h:selectBooleanCheckbox> 

Мы передаем один параметр с и принимает параметр в методе ActionListener как: (String)context.getExternalContext().getRequestParameterMap().get("name1");

После миграции:

<h:selectBooleanCheckbox id="comp1" value="#{bean.select}"> 
       <a4j:ajax event="click" listener="#{bean.processInput}" execute="@this" render="compId"/>     
</h:selectBooleanCheckbox> 

Я хочу передать пункт метр метода bean.processInput, который после подписания:

public void processInput(AjaxBehaviorEvent event){ 

Согласно этому сообщению - Issues in passing parameter in f:ajax, мы не можем использовать <f:param> (ее не работает также), и мы не используем EL 2.2, которая исключает прохождение параметра в методе подпись.

Поскольку мы не можем использовать context.getApplication(). EvaluateExpressionGet из-за ограничения на нашей странице Xhtml только опция доступна использование <a4j:param name="" value="" assignTo=""/>. Но это должно иметь один переменные, определенные в компоненте требуют изменений коды.

Итак, мой вопрос в том, можем ли мы передать параметр от UI к слушателю во втором случае и без изменения кода.

ответ

5

Вы можете использовать f:attribute так:

<h:selectBooleanCheckbox id="comp1" value="#{bean.select}"> 
    <a4j:ajax event="click" listener="#{bean.processInput}" execute="@this" render="compId"/>    
    <f:attribute name="name" value="paramValue" /> 
</h:selectBooleanCheckbox> 

и использовать его в фасоли:

public void processInput(AjaxBehaviorEvent event) 
{ 
    System.out.println(event.getComponent().getAttributes().get("name")); 
} 
+0

Это сработало, спасибо @Alexandre Lavoie – Atul

0

Убедитесь, что е: компонент атрибута не является дочерним компонентом a4j: Аякса. он должен быть неотложным дочерним компонентом h: selectBooleanCheckBox, если не вызвал триггер слушателя.