Wicket: Bedingte Anzeige in Vorlage

8

Hy, Ich möchte einen bestimmten Teil (zB ein div) meiner Wicket-Vorlage nur unter einer bestimmten Bedingung anzeigen (zB nur wenn ich die Daten dafür habe). Das Problem ist:

Wenn ich nur das Panel hinzufüge (das Div auffüllen), wenn ich die Daten bekommen habe, wird jedes Mal eine Exception ausgelöst, wenn ich die Seite ohne die Daten aufruft (weil die referenzierte Wicket-ID nicht zum Komponentenbaum hinzugefügt wird).

Die einzige Lösung, die mir in den Sinn kam, war, ein leeres Panel hinzuzufügen, wenn keine Daten vorhanden sind. Dies ist keine ideale Lösung, da ich nicht benötigten Code im Java-Code und viele leere divs in meinem gerenderten HTML-Code habe.

Gibt es also eine bessere Lösung, um mehrere Teile einer Wicket-Vorlage nur unter bestimmten Bedingungen einzubinden?

    
theomega 06.08.2009, 23:36
quelle

5 Antworten

4

Obwohl dies eine alte Frage ist, könnte hier eine weitere Lösung sein: wicket: enclosure (und dies )

Update : Jetzt brauchte ich diese Funktionalität selbst (für jetwick ). Ich benutze WebMarkupContainer einen für eingeloggten Zustand und einen für eingeloggten Zustand und setze die richtige Sichtbarkeit:

%Vor%

Der Vorteil für mich ist, dass ich einen NullpointerExc in der // ## markierten Zeile verhindere und das umschließende Feature von Wicket würde mir in diesem Fall, glaube ich, hässlicher aussehen.

    
Karussell 01.08.2010, 17:03
quelle
3

Wie @miaubiz sagte, können Sie setVisible (false) aufrufen, oder Sie können die isVisible () -Methode überschreiben, wenn die Sichtbarkeit von einem anderen Status abhängig ist (z. B. Felder gefüllt).

    
tetsuo 22.09.2009 02:13
quelle
2

Yup, Sie möchten isVisible überschreiben. Dadurch wird das isVisible = false html-Markup vom gleichmäßigen Rendern auf die endgültige HTML-Seite beibehalten. Auch nach den Dokumenten (erwähnt in EmptyPanel ), können Sie den WebMarkupContainer als Wrapping-Komponente verwenden.

%Vor%     
jgormley 04.05.2010 16:42
quelle
1

Ich denke, deshalb gibt es EmptyPanel . Ohne etwas über deinen Code zu wissen, kann ich nur sagen, dass das, was ich denke, etwas ist, das ich mit der Kombination eines Kindes von AbstractRepeater und Fragment . Wenn Sie bereit sind, mehr über das, was Sie tun möchten, zu erzählen und vielleicht auch etwas Code zur Verfügung stellen, werde ich Ihnen gerne helfen, so gut ich kann.

    
Esko 08.08.2009 08:56
quelle
0

Sie können setVisible aufrufen (false); auf der Komponente, die Sie ausblenden möchten.

    
miaubiz 09.09.2009 08:22
quelle

Tags und Links