8
votes

Wicket: Affichage conditionnel dans le modèle

hy, Je souhaite afficher une certaine partie (une divigne par exemple) de mon modèle de guichet uniquement sous une certaine condition (par exemple, si je dispose des données pour le remplir). Le problème est:

Si je n'aijoute que le panneau (remplissant la DIV) si j'ai eu les données, une exception est lancée à chaque fois que j'appelle la page sans les données (car l'identifiant de guichet référencé n'est pas ajouté à l'arborescence du composant).

la seule solution qui me suis venu à l'esprit était d'ajouter un panneau vide s'il n'y a pas de données. Ce n'est pas une solution idéale car j'ai reçu un code inutile dans le code Java et de nombreuses divs vides dans mon HTML rendu.

y a-t-il une meilleure solution pour inclure plusieurs parties d'un guichet-modèle uniquement sous une condition?


0 commentaires

5 Réponses :


1
votes

Je suppose que c'est pourquoi il y a Ostypanel . Sans connaître votre code plus, je ne peux que dire que ce que je pense que vous faites est quelque chose que je ferais une combinaison d'un enfant de Abstractrepeater et Fragment . Si vous êtes prêt à en dire plus sur ce que vous voulez faire et peut-être donner du code aussi, je serai heureux d'aider autant que possible.


0 commentaires

0
votes

Vous pouvez appeler SETVISIBLE (FALSE); sur le composant que vous voulez cacher.


0 commentaires

3
votes

Comme @Miaubiz dit, vous pouvez appeler SetVisible (FALSE) ou vous pouvez remplacer la méthode ISvissible () si la visibilité est conditionnelle à un autre état (champs remplis, par exemple).


0 commentaires

3
votes

Yup, vous voulez remplacer isisible. Cela gardera l'ISvissible = FAUX MARKUP HTML de même de rendu à la page HTML finale. Aussi, selon les documents (mentionnés dans Ostypanel ), vous pouvez utiliser le WebMarkUpContainer comme composant d'emballage.

    this.add(new SimpleResourceModelLabel(NO_DATA_LABEL){
        private static final long serialVersionUID = 1L;

        @Override
        public boolean isVisible() { return myList.isEmpty(); } 
    });

    final WebMarkupContainer table = new WebMarkupContainer(MY_DATA_TABLE){
        private static final long serialVersionUID = 1L;

        @Override
        public boolean isVisible() { return !myList.isEmpty(); } 
    };


1 commentaires

Plus de The Wicket Docs ( cwiki.apache.org/wicket/ Lifecycle-of-A-Wicket-Application.h TML ): Composant.Render () Suit ces étapes pour rendre un composant: 1. Déterminez la visibilité des composants. Si le composant n'est pas visible, la réponse de requestcycle est modifiée en NullResponse.getinstance (), qui est une mise en œuvre de la réponse qui ne fait que supprimer sa sortie.



5
votes

Bien que ce soit une vieille question ici pourrait être une autre solution: Wicket: Enceinte (et Ceci )

Mise à jour : Maintenant, j'avais besoin de cette fonctionnalité par mon auto (pour jetwick ). J'utilise WebMarkupContainer un pour l'état de Logningin et un pour l'état de journalisation et définissez la bonne visibilité: xxx

L'avantage de cela pour moi est que j'empêche un nullpointerexc dans le / / ## La ligne marquée et la fonctionnalité enfermée du guichet sembleraient plus moche pour moi dans ce cas je pense.


0 commentaires