Как программно или динамически добавить слушатель ajax к компоненту JSF 2? - PullRequest
1 голос
/ 21 августа 2011

Как программно или динамически добавить слушатель ajax к компоненту JSF 2?
Я пытался:

  ...
  FacesContext facesContext = FacesContext.getCurrentInstance();
  AjaxBehavior dragStart = (AjaxBehavior)facesContext.getApplication().createBehavior(AjaxBehavior.BEHAVIOR_ID);
  dragStart.addAjaxBehaviorListener(new DragEnterListener());
  dragStart.setTransient(true);
  component.addClientBehavior("dragstart", dragStart);
  ...

  public class DragEnterListener implements AjaxBehaviorListener {

    @Override
    public void processAjaxBehavior(AjaxBehaviorEvent event) throws AbortProcessingException {
      System.out.println("AjaxListener CALLED!!! ");
    }
  }

Но это не работает.На странице я получил это исключение JS:

serverError: class java.lang.IllegalStateException  
cz.boza.formcreator.FormModel$DragEnterListener

Я нашел этот пример в RichFaces: http://community.jboss.org/message/611571

Но в обычном JSF 2 в классе AjaxBehavior нет

addAjaxBehaviorListener(MethodExpression methodExpression) 

есть только

addAjaxBehaviorListener(ValueExpression valueExpression) 

Я пытаюсь решить эту проблему в течение многих дней.
Пожалуйста, помогите.
Большое спасибо.

1 Ответ

0 голосов
/ 23 августа 2011

ОК, поэтому я провел дополнительное исследование и обнаружил, что если component, в который я не хочу добавлять прослушиватель ajax, также добавляется на страницу динамически (из java - как parant.getChildren().add(component)), все работает нормально.

Но если component, в который я не хочу добавлять слушатель ajax, будет добавлен статически (в jsp - как <h:panelGroup binding="#{bean.component}">) на страницу, будет выдвинуто вышеупомянутое странное исключение:

serverError: class java.lang.IllegalStateException
cz.boza.formcreator.FormModel$DragEnterListener

Я постараюсь задать этот вопрос на форуме JSF.Может быть, это ошибка в Мохаре.

...