Domanda

Hy, Voglio visualizzare una certa parte (un div per esempio) della mia wicket-template solo in una determinata condizione (per esempio solo se ho i dati per riempirlo). Il problema è:

Se solo aggiungo il pannello (riempire il div) se ho ottenuto i dati, viene generata un'eccezione ogni volta che io chiamo la pagina senza i dati (in quanto il riferimento wicket-id non viene aggiunto al componente-albero).

L'unica soluzione che mi è venuta in mente è stato quello di aggiungere un pannello vuoto se non ci sono dati. Questa non è una soluzione ideale perché ho ottenuto un certo codice non necessario nel codice Java e molti div vuoti nel mio html renderizzato.

Quindi non v'è una soluzione migliore per includere varie parti di un wicket-modello solo in una condizione?

È stato utile?

Soluzione

Anche se questa è una vecchia questione qui potrebbe essere una soluzione in più: wicket: recinto (e questo )

Aggiorna : Ora ho bisogno di questa funzionalità con la mia auto (per jetwick ). Sto usando WebMarkupContainer uno per lo stato loggedin e uno per lo stato loggedOut e impostare la giusta visibilità:

if (loggedIn()) {            
   WebMarkupContainer loggedInContainer = new WebMarkupContainer("loggedIn");
   //## do something with the user
   User user = getUserSomeWhere();
   loggedInContainer.add(new UserSearchLink("userSearchLink"));
   add(loggedInContainer);
   add(WebMarkupContainer("loggedOut").setVisible(false));
} else {
   add(new WebMarkupContainer("loggedIn").setVisible(false));
   WebMarkupContainer loggedOutContainer = WebMarkupContainer("loggedOut");
   loggedOutContainer.add(new LoginLink() {...});
   add(loggedOutContainer);
}

Il vantaggio di questo per me è che posso evitare un NullpointerExc nella // ## linea marcata e la caratteristica di allegare wicket guarderei più brutto per me in questo caso credo.

Altri suggerimenti

Come @miaubiz detto, è possibile chiamare setVisible (false), oppure si può sovrascrivere il metodo IsVisible (), se la visibilità è subordinata a qualche altro stato (campi pieni, per esempio).

Yup, si desidera ignorare IsVisible. Ciò manterrà il IsVisible = false markup HTML anche il rendering alla pagina finale html. Inoltre, secondo la documentazione (menzionato in EmptyPanel ), è possibile utilizzare il WebMarkupContainer come componente di avvolgimento.

    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(); } 
    };

Credo che questo è il motivo per cui c'è EmptyPanel . Senza conoscere il codice più Posso solo dire che quello che penso che stai facendo è qualcosa che mi piacerebbe fare con la combinazione di qualche bambino di AbstractRepeater e frammento . Se siete disposti a dire di più su ciò che si vuole fare e forse fornire qualche codice di troppo, sarò felice di aiutare il più possibile.

è possibile chiamare setVisible (false); sul componente che si desidera nascondere.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top