为什么不调用事件监听器?

时间:2010-08-18 13:42:41

标签: events jsf icefaces menuitem

我正在使用 ice:menuPopup 在树节点上动态创建菜单。在jsf页面我有类似的东西

  <f:facet name="content">
     <ice:panelGroup id="faccont" style="display: inline" menuPopup="qtaPupMenu"><ice:menuPopup imageDir="/images">
           <ice:menuItems  id="qtaPupMenu" value="#{item.userObject.menuModel}"/>
   . . .

此代码动态创建菜单项:

  public List<MenuItem> getMenuModel() {
    List<MenuItem> items = new LinkedList<MenuItem>();
    MenuItem mi = new MenuItem();
    mi.setValue("menu text");    
    ExpressionFactory expf = FacesContext.getCurrentInstance().getApplication().getExpressionFactory();
    MethodExpression mthd = expf
    .createMethodExpression(FacesContext.getCurrentInstance().getELContext(), "#{beanmodel.clickMenuContx}", void.class, new Class[] { ActionEvent.class });
    mi.setActionExpression(mex);           
    items.add(mi);
    return items;
  }

问题是事件监听器“#{beanmodel.clickMenuContx}”永远不会被调用。 我也试过了MenuItem的methodBinding和setActionListener方法,但是没有用。 我哪里错了?

1 个答案:

答案 0 :(得分:0)

发现它! 它缺少MenuItem id 属性。 我添加了

   mi.setId("myUniqueId");

它按预期工作。