Primefaces программный SplitButton - PullRequest
       24

Primefaces программный SplitButton

0 голосов
/ 20 февраля 2019

Я пытаюсь создать SplitButton программно.Кнопка отображается на странице, но слушатели действия не вызываются (ни для кнопки, ни для пунктов меню).Я сделал то же самое для CommandButton (следуя предложенному решению здесь ), и он работает.

Моя попытка:

      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!!");
      }
...