如何以编程方式或动态地向JSF 2组件添加ajax侦听器?

时间:2011-08-21 19:17:13

标签: ajax dynamic jsf-2 listeners

如何以编程方式或动态地向JSF 2组件添加ajax侦听器?
我试过了:

  ...
  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

但是在AjaxBehavior类中的普通JSF 2中没有

addAjaxBehaviorListener(MethodExpression methodExpression) 

只有

addAjaxBehaviorListener(ValueExpression valueExpression) 

我试图解决这个问题很多天 请帮忙。
非常感谢你。

1 个答案:

答案 0 :(得分:0)

好的,所以我做了更多的研究,发现如果我不想添加ajax监听器的component也是动态添加的(从java - 如parant.getChildren().add(component))到页面,一切工作良好。

但是如果我要添加ajax监听器的component被静态地添加(在jsp中,就像<h:panelGroup binding="#{bean.component}">一样)到页面中,就会抛出上述奇怪的异常:

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

我将尝试在JSF论坛中提出这个问题。可能是Mojara的一个错误。