2017-10-20 14 views
0

Je dispose d'une liste déroulante et l'onglet Valeurs de la liste déroulante sera activé ou désactivé. Par défaut, j'utilise getTabContainerCssClass() pour tous les onglets et il affichera tous les onglets comme vue active, mais je veux changer une tabulation de la classe css car elle semble être désactivée après avoir changé la valeur de la liste déroulante.Modification de la classe de l'onglet désactivé lors du changement de la valeur de la liste déroulante

DropDownChoice ProductDropDown = new DropDownChoice("ProductList", new PropertyModel(this, "SupplierProduct"),ProductList, new choiceRenderer("name","id")); 
add(supplierProductDropDown); 

supplierProductDropDown.add(new AjaxFormComponentUpdatingIndicatingBehavior("onchange"){ 
      @Override 
      protected void onUpdate(AjaxRequestTarget target) { 
       /* do some code for changing dropdown */ 
      } 
     }); 

tabs = new ArrayList<AbstractTab>(); 

/* provide some tab details */ 

tab = new AjaxTabbedPanel("tabs", tabs){ 

     private static final long serialVersionUID = 1L; 

     @Override 
     protected String getTabContainerCssClass() { 
      return "producttab-row"; 
     } 
     @Override 
     protected WebMarkupContainer newLink(String linkId, final int index) { 

      return new Link(linkId) 
      { 
        private static final long serialVersionUID = 1L; 

        public void onClick() { 
          setSelectedTab(index); 
        } 

        @Override 
        public boolean isEnabled() { 
         if(index == 1 && /*drop down condition that will be disable the tab*/){ 
          /*I want to change css of this tab*/ 
          return false; 
         } 
         else{ 
          return true; 
         } 
        } 
      } 
     } 
} 

Toute idée sur ce ......

MISE À JOUR: après la mise à jour du code

@Override 
        protected void onComponentTag(final ComponentTag tag) { 
        // TODO Auto-generated method stub 
         super.onComponentTag(tag); 
         if(/*Dropdown condition*/){ 

          tag.append("class", "disabletab", " "); 
         } 
} 

Mais il n'a pas travaillé sur ce point. S'il vous plaît aider

SOLUTION: J'Override onComponentTag dans AjaxTabbedPanel.see ci-dessous le code

tabs = new ArrayList<AbstractTab>(); 

/* provide some tab details */ 

tab = new AjaxTabbedPanel("tabs", tabs){ 

    private static final long serialVersionUID = 1L; 

    @Override 
    protected String getTabContainerCssClass() { 
     return "producttab-row"; 
    } 
@Override 
      protected void onComponentTag(final ComponentTag tag) 
      { 
      super.onComponentTag(tag); 

      String cssClass = tag.getAttribute("class"); 
      if (cssClass == null) 
      { 
       cssClass = " "; 
      } 
      /*check condition and change css classname*/ 
      tag.put("class", cssClass.trim()); 
     } 
} 
+0

ne ressemble pas à la mise à jour correctement – soorapadman

+0

@soorapadman Je n'ai pas compris votre point. Se il vous plaît dites-moi où je me trompe – nitin

+0

Je suppose Onchange de liste déroulante que vous modifiez le panneau à onglets. Afin de changer dans les onglets en utilisant Ajax événement U devrait avoir mettre à jour le composant en utilisant 'target.add' quelque chose comme ça, Puisque vous avez partagé moins de code je ne peux pas obtenir quel est le problème exact. – soorapadman

Répondre

2

Vous devez remplacer Link#onComponentTag(ComponentTag) méthode et définir la classe CSS avec: tag.append("class", "dynamicValueDependingOnDropDownsModel", " ").

+0

dynamicValueDependingOnDropDownsModel doit être un nom de classe dynamaique que je veux modifier. – nitin

+0

Salut Martin-g j'ai mis à jour ma question avec votre suggestion, mais n'a pas fonctionné. S'il vous plaît aider. – nitin

+0

Salut @ martin-g j'ai mis à jour ma question avec votre suggestion, mais n'a pas fonctionné. S'il vous plaît aider. – nitin