Domanda

Mi piacerebbe aggiungere un'etichetta a un pannello in cui wicket modello dell'etichetta, è un valore enum. Sulla base del valore di quel enum, mi piacerebbe per visualizzare un messaggio diverso tirato dal file delle proprietà della pagina.

Per esempio, ecco un enum:

public enum ApprovalType { UNAPPROVED, APPROVED, BLOCKED };

Posso facilmente aggiungere un'etichetta al pannello che ha questa enum come modello:

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

Tuttavia, questo sarà semplicemente uscita NON OMOLOGATO, APPROVATO, o bloccato. Mi piacerebbe produrre un messaggio localizzato che viene selezionato in base al valore di questa enum.

Quindi, se ho questo file proprietà, qual è il modo migliore per ottenere questi messaggi in uscita?

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

posso farlo funzionare in questo modo:

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

Ma il problema è che ResourceModel accetta solo un (chiave di risorsa) stringa. Mi piacerebbe tirare automaticamente il valore della chiave di risorsa da un modello (preferibilmente un CompoundPropertyModel). In altre parole, io non voglio fare questo:

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

preferirei fare qualcosa di simile:

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

C'è una componente che fa questo che viene fornito con Wicket? O devo scrivere il mio?

Infine, ho scoperto questo funziona anche:

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

Ma questo sembra eccessivamente prolisso, e ancora non utilizza la semplicità di utilizzo di CompoundPropertyModel.

idee?

È stato utile?

Soluzione

Non so se questo 'lavoro ll, ma forse si potrebbe provare a scrivere la propria classe EnumModel che assume il valore di un Enum e restituisce un valore ResourceModel ..

Si prega di dirlo, se quanto sopra non è abbastanza chiaro, cercherò di elaborare.

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