Mentre usando Table.formatPropertValue()
per colonne della tabella formattazione è una valida opzione, ho scoraggiare fortemente di utilizzare questo metodo quando si lavora con Vaadin 7. formatPropertValue()
è il vecchio Vaadin 6 modo di formattazione Valori della tabella Questo metodo è ancora disponibile in Vaadin 7 per compatibilità verso il basso. L'utilizzo di questo metodo è problematico in diversi modi:
- Non è un file tipografico. Poiché si ottiene solo un
Property<?>
come parametro, è necessario innanzitutto verificare il tipo concreto del valore della proprietà.
- È necessario ereditare dalla tabella solo per adattare la formattazione di una o più colonne. L'ereditarietà di classe è sicuramente l'approccio sbagliato per adattare il comportamento di una classe per un particolare caso d'uso. Se hai più di uno di questi casi, finirai per implementare una serie di sottoclassi di Table che in seguito non potranno essere facilmente intercambiate.
- Codice di conversione hard-wire (da BigDecimal a String) all'implementazione concreta di alcuni componenti dell'interfaccia utente. Questo è male per il riutilizzo. Che cosa succede se hai bisogno di quella conversione in qualche altro posto, ad esempio quando visualizzi un BigDecimal su un'etichetta? Dovresti duplicare questo codice o in qualche modo estrarlo in una classe o un metodo separato.
L'ultimo punto è esattamente ciò che Vaadin 7 fa per te: mantenere la logica di conversione separata da qualche componente UI concreto. Questo è ciò che l'interfaccia com.vaadin.data.util.converter.Converter
è per. Quindi, l'OP aveva perfettamente ragione nel suo primo assunto: Table.setConverter()
è la via da seguire con Vaadin 7. I convertitori sono di tipo standard e consentono la separazione delle preoccupazioni.
L'obiezione che il convertitore che può essere impostato con Table.setConverter()
converta solo da BigDecimal a String non è giustificato in questo caso. Table.formatPropertValue()
non fa nulla di diverso, si converte anche in stringa. Ma questo è ovvio, una tabella non mostra nulla di diverso dai dati di stringa nelle sue colonne. Di fatto, il comportamento predefinito di Table consiste nel chiamare il metodo toString()
nei tipi di valore Property
che non è in grado di convertire autonomamente.
Per utilizzare i convertitori, vedere section 9.2.3 of the Book of Vaadin.
fonte
2014-05-22 06:10:20
Ok questo è fantastico finora.Ma: cosa succede se voglio solo visualizzare i segni "+" e "-" per una colonna specifica, e tutte le altre colonne 'BigDecimal' non dovrebbero mostrare questi segni? – membersound
@membersound, utilizzare 'a_col_id' per determinare la colonna a cui appartiene il valore. – hmjd
Vedo, funziona! – membersound