2017-09-29 7 views
1

J'ai besoin de montrer les données de la DB dans le format de tableau avec éditer, enregistrer, annuler, supprimer le bouton, sa grille appelée dans wicket. Dans la ligne du tableau après avoir cliqué sur le bouton éditer, les données doivent apparaître dans 2 listes déroulantes et sélectionner les données dans la 1ère liste déroulante, puis le 2ème modèle de données déroulantes doit être modifié en fonction de la sélection de la première liste déroulante. Je suis passé par le https://github.com/wicketstuff/core/tree/master/editable-grid-parent. Mais il montre seulement grille modifiable avec 1 dropdown dans le guichet et je veux 2 dropdown. S'il vous plaît aider à ce sujet.Comment mettre en œuvre la grille modifiable avec 2 dropdown connexes dans le guichet?

MISE À JOUR: J'ai utilisé cette

private List<AbstractEditablePropertyColumn<Person, String>> getColumns() 
     { 
    List<AbstractEditablePropertyColumn<Person, String>> columns = new ArrayList<AbstractEditablePropertyColumn<Person, String>>(); 
    stateDropDownPropertyColumn = new AbstractEditablePropertyColumn<Person, String>(new PropertyModel<String>(this, "selectedMake"), "state") 
    { 

     private static final long serialVersionUID = 1L; 

     public EditableCellPanel<Person> getEditableCellPanel(String componentId) 
     { 

      return getStateDDCellpanel(componentId,this);    
     } 
    }; 

    cityDropDownPropertyColumn = new AbstractEditablePropertyColumn<Person, String>(new Model<String>("CarModel"), "city"){ 

     private static final long serialVersionUID = 1L; 

     @Override 
     public EditableCellPanel<Person> getEditableCellPanel(String componentId) { 
      // TODO Auto-generated method stub 
      return getCityDDCellpanel(componentId,this); 
     }}; 

    columns.add(stateDropDownPropertyColumn); 
    columns.add(cityDropDownPropertyColumn); 
    return columns; 
} 
    private EditableRequiredDropDownCellPanel<Person, String> getStateDDCellpanel(String componentId, 
            AbstractEditablePropertyColumn<Person, String> DropDownPropertyColumn){ 

    this.stateComponentID = componentId; 
    this.stateDropDownPropertyColumn = DropDownPropertyColumn; 
    stateDropDownCellPanel = new EditableRequiredDropDownCellPanel<Person,  String>(stateComponentID, stateDropDownPropertyColumn, stateChoices); 

    return stateDropDownCellPanel; 

} 

private EditableRequiredDropDownCellPanel<Person, String> getCityDDCellpanel(String componentId, 
     AbstractEditablePropertyColumn<Person, String> DropDownPropertyColumn){ 

    this.cityComponentID = componentId; 
    this.cityDropDownPropertyColumn = DropDownPropertyColumn; 
    cityDropDownCellPanel = new EditableRequiredDropDownCellPanel<Person, String>(cityComponentID, cityDropDownPropertyColumn, cityChoices); 
    cityDropDownCellPanel.setOutputMarkupId(true); 
    cityDropDownCellPanel.setOutputMarkupPlaceholderTag(true); 
    return cityDropDownCellPanel; 

} 

Je n'ai pas la moindre idée de ce où je dois mettre en place des comportements de la cellule déroulante.

+0

de cette source peut être appliquée à deux, trois listes déroulantes. Lisez attentivement, comment la liste des colonnes est construite, et ajoutez votre. –

+0

PEUT-ÊTRE Vous voulez "liste dynamique wikcket de choix" (phrase au milieu n'est pas clair pour moi). Ce motif est facile googlable –

+0

Le motif de cette source peut être appliqué pour 2 dropdown mais la liste des choix n'est pas dynamique. Comment vais-je faire en utilisant cette source et généralement en utilisant la liste déroulante du composant wicket dropdown est dynamiquement. – nitin

Répondre

0

Probablement presque réponse directe à la question selon la liste dynamique (première est fixe, deuxième id dépendait, calculée dynamiquement): http://examples7x.wicket.apache.org/ajax/choice

être avec SO règles de ne pas inclure des liens purs, extrait de l'exemple officiel Apache sous licence (préparé pour être plus court - pas compilé)

Le modèle vous permet de préparer les données modifiées, et l'actualisation des forces de l'événement AJAX - c'est le cœur de l'idée. Événement (comportement ajax) connecté aux premiers «décideurs» et forces de comportement pour actualiser les «modèles». Ceci est typique du modèle wicket + ajax.

/** 
* Linked select boxes example 
* 
* @author Igor Vaynberg (ivaynberg) 
*/ 
public class ChoicePage extends BasePage 
{ 
private String selectedMake; 

private final Map<String, List<String>> modelsMap = new HashMap<>(); // map:company->model 

/** 
* @return Currently selected make 
*/ 
public String getSelectedMake() 
{ 
    return selectedMake; 
} 

/** 
* @param selectedMake 
*   The make that is currently selected 
*/ 
public void setSelectedMake(String selectedMake) 
{ 
    this.selectedMake = selectedMake; 
} 

/** 
* Constructor. 
*/ 
public ChoicePage() 
{ 
    modelsMap.put("AUDI", Arrays.asList("A4", "A6", "TT")); 
    modelsMap.put("CADILLAC", Arrays.asList("CTS", "DTS", "ESCALADE", "SRX", "DEVILLE")); 
    modelsMap.put("FORD", Arrays.asList("CROWN", "ESCAPE", "EXPEDITION", "EXPLORER", "F-150")); 

    IModel<List<String>> makeChoices = new AbstractReadOnlyModel<List<String>>() 
    { 
     @Override 
     public List<String> getObject() 
     { 
      return new ArrayList<>(modelsMap.keySet()); 
     } 

    }; 

    IModel<List<String>> modelChoices = new AbstractReadOnlyModel<List<String>>() 
    { 
     @Override 
     public List<String> getObject() 
     { 
      List<String> models = modelsMap.get(selectedMake); 
      if (models == null) 
      { 
       models = Collections.emptyList(); 
      } 
      return models; 
     } 

    }; 

    Form<?> form = new Form("form"); 
    add(form); 

    final DropDownChoice<String> makes = new DropDownChoice<>("makes", 
     new PropertyModel<String>(this, "selectedMake"), makeChoices); 

    final DropDownChoice<String> models = new DropDownChoice<>("models", 
     new Model<String>(), modelChoices); 
    models.setOutputMarkupId(true); 

    form.add(makes); 
    form.add(models); 

    ... 

    makes.add(new AjaxFormComponentUpdatingBehavior("change") 
    { 
     @Override 
     protected void onUpdate(AjaxRequestTarget target) 
     { 
      target.add(models); 
     } 
    }); 
    } 
} 

MISE À JOUR après commentaire. Revenons au code github précédent, doit remplacer la liste fixe par le modèle. Comment??? Dérivez ou copiez, ajoutez contructor avec IModel ... Wicket a un très bon design d'objet. De la même manière, nous ajoutons des types de colonnes inconnus à l'auteur de la grille (non planifié).

BTW Votre commentaire 'ça ne marche pas' est très large. Désolé, je peux vous aider si je peux, mais ne faites pas de projet complet pour vous. J'espère que vous apprécierez avec le codage.

package org.wicketstuff.egrid.column; 

import java.util.List; 

import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn; 
import org.apache.wicket.markup.html.form.DropDownChoice; 
import org.apache.wicket.markup.html.form.FormComponent; 
/** 
* 
* @author Nadeem Mohammad 
* 
*/ 
public class EditableRequiredDropDownCellPanel<T, S> extends EditableCellPanel 
{ 

    private static final long serialVersionUID = 1L; 

    public EditableRequiredDropDownCellPanel(final String id, final PropertyColumn<T, S> column, @SuppressWarnings("rawtypes") final List choices) 
    { 
     super(id); 

     @SuppressWarnings("unchecked") 
     DropDownChoice<T> field = new DropDownChoice<T>("dropdown", choices); <--- **** Here should be model **** 
     field.setLabel(column.getDisplayModel()); 
     add(field); 
    } 

    @Override 
    public FormComponent<?> getEditableComponent() 
    { 
     return (FormComponent<?>) get("dropdown"); 
    } 
} 

puis avec retour en classe a changé ici:

columns.add(new AbstractEditablePropertyColumn<Person, String>(new Model<String>("Age"), "age") 
     { 

      private static final long serialVersionUID = 1L; 

      public EditableCellPanel getEditableCellPanel(String componentId) 
      { 
       return new ***** EditableRequiredDropDownCellPanel ***** <Person, String>(componentId, this, Arrays.asList("10","11","12","13","14","15")); 
      } 

}); 

ajouter Beahviours trop

modèle
+0

@jackez C'est bien mais j'ai essayé ceci pour un exemple de grille modifiable et ça ne marche pas. Pouvez-vous s'il vous plaît donner une idée dans un exemple de grille modifiable avec getColumn(). – nitin

+0

Voilà ma question est où devrais-je mettre des comportements dans le code. – nitin

+0

Mettez à jour la question pour vous aider .... – nitin