Per esempio state stampando un elenco di messaggi e volete stampare solo i primi 100 caratteri del corpo che altrimenti sarebbe troppo lungo.
Per farlo occorre sovrascrivere il metodo PopulateItem della property column come segue:
PropertyColumn colonnaCorpo = new PropertyColumn<Messaggio>(new Model<String>("Corpo"), "corpo"){
@Override
public void populateItem(Item<ICellPopulator<Messaggio>> item,
String componentId, IModel<Messaggio> rowModel) {
String corpoModel = rowModel.getObject().getCorpo();
item.add(new Label(componentId,corpoModel.substring(0, Math.min(50,corpoModel.length()))));
}
};
Il nostro POJO di partenza si chiama Messaggio e ha dentro una proprietà stringa chiamata corpo.
Sovrascrivendo la populateItem, andiamo a sovrascrivere il modo in cui il componente viene stampato.
item: rappresenta l'oggetto colonna;
componentId: rappresenta l'id del singolo componente (in questo caso dinamico dato che è una cella di una tabella);
rowModel: rappresenta il modello del POJO di cui questo componente sta per stampare una proprietà;
Nell'esempio recuperiamo il testo del corpo dal modello richiamando prima l'oggetto Messaggio dal Modello e quindi richiamando la getCorpo().
A questo punto aggiungo alla item, una Label con lo stesso ID e come stringa la sottostringa del corpo facendo in modo che Java non si incavoli se chiedo più caratteri di quanto la stringa sia effettivamente lunga (leggasi, aggiungo il MIN).
Questo barbatrucco è molto comodo quando dovete ridefinire il modo in cui il componente stampa il valore. Le potenzialità sono multiple. Potete per esempio inserire un TextField dentro la cella, o un Panel con dentro altra roba ecc...