Frage

Hy, Ich möchte einen bestimmten Teil (a div zum Beispiel) zum Anzeigen meiner Wicket-Vorlage nur unter einer bestimmten Bedingung (zB nur dann, wenn ich die Daten haben, es zu füllen). Das Problem ist:

Wenn ich nur das Panel hinzufügen (Füllen des div), wenn ich die Daten bekam, wird eine Ausnahme jedes Mal, wenn ich die Seite ohne die Daten aufrufen geworfen (weil die referenzierte Wicket-ID nicht auf die Komponente Baum hinzugefügt wird).

Die einzige Lösung, die kam ich eine leere Tafel hinzuzufügen war, wenn es keine Daten gibt. Dies ist keine ideale Lösung, weil ich einige nicht benötigten Code in dem Java-Code und viele leeren div-Tags in meiner gerenderten html bekam.

So gibt es eine bessere Lösung mehrere Teile einer Wicket-Vorlage, um nur unter einer Bedingung?

War es hilfreich?

Lösung

Obwohl dies eine alte Frage ist hier könnte eine weitere Lösung: Wicket: Gehäuse (und dieser )

Aktualisieren : Jetzt brauchte ich diese Funktionalität von mir selbst (für jetwick ). Ich verwende WebMarkupContainer eine für LoggedIn Zustand und einen für LoggedOut Zustand und stellen Sie die richtige Sichtbarkeit:

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

Der Vorteil für mich ist, dass ich eine NullpointerExc in der // ## markierten Linie und das enclose Merkmal Wicket mir aussehen würde mehr hässlich verhindern in diesem Fall denke ich.

Andere Tipps

Wie @miaubiz sagte, können Sie setVisible (false) aufrufen, oder Sie können die isVisible () -Methode außer Kraft setzen, wenn die Sichtbarkeit zu einigen anderen Zustand bedingt ist (Felder gefüllt, zum Beispiel).

Yup, möchten Sie isVisible außer Kraft zu setzen. Dadurch wird die isVisible = false HTML-Markup hält von selbst auf die endgültige HTML-Seite zu machen. Auch nach der Dokumentation (unter EmptyPanel ), können Sie die

Ich denke, das ist, warum es EmptyPanel . Ohne zu wissen, über Ihren Code kann ich nur sagen, dass das, was ich denke, du tust etwas, das ich mit Kombination von einigem Kind von AbstractRepeater und Fragment . Wenn Sie bereit sind, mehr darüber zu sagen, was Sie tun möchten und vielleicht auch einige Codes zur Verfügung stellt, werde ich glücklich sein, so viel zu helfen, wie ich kann.

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top