Frage

Ich möchte ein Etikett an einem Wicket Panel hinzuzufügen, wo das Modell der Markierung ein ENUM-Wert. Basierend auf dem Wert dieser Enumeration, würde Ich mag eine andere Nachricht von der Seite der Eigenschaft-Datei gezogen anzuzeigen.

Zum Beispiel, hier ist eine Enumeration:

public enum ApprovalType { UNAPPROVED, APPROVED, BLOCKED };

Ich kann leicht ein Etikett auf dem Panel hinzufügen, die diese Enumeration als Vorbild hat:

add(new Label("approval", new Model(ApprovalType.APPROVED)));

Dies wird jedoch einfach Ausgang nicht genehmigt, genehmigt oder blockiert. Ich mag würde eine lokalisierte Nachricht auszugeben, basierend auf dem Wert dieser Enumeration ausgewählt ist.

Also, wenn ich diese Eigenschaften-Datei habe, was ist der beste Weg, um diese Nachrichten Ausgabe zu erhalten?

UNAPPROVED=Your membership is currently pending approval
APPROVED=Your membership has been approved
BLOCKED=You have been blocked from membership

ich kann es wie folgt funktioniert:

add(new Label("approval", new ResourceModel(ApprovalType.APPROVED.name());

Aber das Problem ist, dass ResourceModel nur einen String (Ressourcenschlüssel) akzeptiert. Ich mag den Wert des Ressourcenschlüssels aus einem Modell automatisch ziehen (vorzugsweise ein CompoundPropertyModel). Mit anderen Worten, ich möchte nicht, dies zu tun:

Member member = (Member) getDefaultModelObject();
add(new Label("approval", new ResourceModel(member.getApproval().name())));

Ich würde eher so etwas wie:

add(new EnumLabel("approval");  // assuming I have a CompoundPropertyModel

Gibt es eine Komponente, die dies tut, die mit Wicket kommt? Oder muß ich meine eigenen schreiben?

Schließlich entdeckte ich dies auch funktioniert:

add(new Label("approval", new StringResourceModel(
    "${}", 
    new PropertyModel<ApprovalType>(getDefaultModel(),"approval")
)));

Aber das scheint allzu ausführlich, und immer noch nicht die Einfachheit nicht nutzt CompoundPropertyModel verwendet wird.

Ideen?

War es hilfreich?

Lösung

Nicht, wenn diese ‚ll Arbeit sicher, aber vielleicht könnten Sie versuchen, Ihre eigene EnumModel Klasse zu schreiben, die den Wert eines Enum nimmt und gibt einen ResourceModel Wert ..

Bitte sagen also, wenn die oben nicht klar genug ist, werde ich versuchen zu erarbeiten.

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