Primefaces程序化SplitButton

时间:2019-02-20 11:42:45

标签: ajax primefaces jsf-2 split-button

我正在尝试以编程方式创建SplitButton。该按钮显示在页面上,但未调用操作侦听器(对于按钮和菜单项均未调用)。我对CommandButton进行了相同的操作(遵循提出的解决方案here),并且可以正常工作。

我的尝试

      public SplitButton createSplitButton(FacesContext context, String unique_id){
                  SplitButton splitButton = (SplitButton)context.getApplication().getViewHandler()
                            .getViewDeclarationLanguage(context, context.getViewRoot().getViewId())
                            .createComponent(context, "http://primefaces.org/ui", "splitButton", new HashMap<>());
                 splitButton.setId(unique_id);
                 splitButton.setValue("splitbutton");
                 splitButton.setAjax(true);
        addMenuItems(splitButton);
                 this.addPrimefacesAjaxSupport(splitButton,splitButton.getDefaultEventName(),"#{myBean.myAction}");

              }


      private AjaxBehavior addPrimefacesAjaxSupport(UIComponentBase comp, String event, String actionListener){  

             MyAjaxBehavior ajaxBehavior = new MyAjaxBehavior ();
             ajaxBehavior.setListener( JSFUtils.createMethodExpression(actionListener, void.class,new Class[]{ BehaviorEvent.class}) );

             ajaxBehavior.setProcess( "@this" );
             comp.addClientBehavior( event, ajaxBehavior );

             return ajaxBehavior;
}

    private void addMenuItems(SplitButton splitButton){
     org.primefaces.component.menuitem.UIMenuItem uiMenuItem = (org.primefaces.component.menuitem.UIMenuItem)context.getApplication().getViewHandler()
                    .getViewDeclarationLanguage(context, context.getViewRoot().getViewId())
                    .createComponent(context, "http://primefaces.org/ui", "menuitem", new HashMap<>());

            uiMenuItem.setAjax(true);
            uiMenuItem.setValue("item "+index);
            uiMenuItem.setId(String.valueOf("i"+index++));
     this.addPrimefacesAjaxSupport(uiMenuItem,uiMenuItem.getDefaultEventName(),getReRenderId(),"#{myBean.myAction}");
     splitButton.getChildren().add(uiMenuItem);
    }


      public void myAction(javax.faces.event.BehaviorEvent event) {
        logger.warn("Welcome to Primefaces!!");
      }

0 个答案:

没有答案