2011-01-13 15 views
13

devo mostrare colonne: - inviare - ricevere - annullatoif-else-if-else nell'espressione textfield

In una colonna rapporto controllando un valore da DB che è "Status". Quindi se lo stato è uguale a 1, quindi invia, = 2 ricevi, = 3 annullato.

L'espressione del campo di testo nel report jasper (? A: b) può richiedere solo una condizione, come posso fornire condizioni multiple? qualcosa come if-else ladder?

risposta

23

È possibile utilizzare un'istruzione ternaria nidificata per ottenere ciò, ma è caotico.

Ad esempio:

(i == 1) ? "Send" : ((i == 2)? "Received" : "Cancelled"); 
+1

Ho fatto anche questo poche volte, ed è ok per un massimo di tre condizioni ... ma chi decodificherà se scrivete 5 o più condizioni? – davorp

+0

grazie, anche io l'ho fatto .. ma come ha detto @davorp .. 3 è max. – cherit

+0

Questa risposta produce sicuramente un odore di codice. @Sean ha ragione: fai qualsiasi logica nel tuo bean, passando il risultato al report. – inanutshellus

4

rendere il campo di stato di un parametro che viene passato dal chicco. In questo modo puoi eseguire qualsiasi elaborazione di cui hai bisogno nel bean, assegnare il risultato alla variabile parametro e passarlo nel tuo rapporto.

+0

grazie ... l'impostazione nel bean potrebbe essere una soluzione valida piuttosto che dare espressione nel report stesso. – cherit

7

è possibile utilizzare metodo replace(), ma è necessario modificare la classe di vostro campo di stringa se non lo è, EX:

$F{f_phone_type}.replace("0","Phone/ATA").replace("1","Gateway").replace("2","SIPTrunk") 
4

Il mio metodo preferito è quello di creare un parametro con le sostituzioni del forma di una HashMap, quando hai un grande gruppo di sottostazioni o se possono cambiare.

È possibile passare le sostituzioni in fase di esecuzione o impostare un valore predefinito. Il vantaggio è che è possibile aggiornare la mappa senza ricompilare il report.

Per esempio, se si dovesse avere un parametro denominato "risk_types" (usando la lingua di default, come Groovy) quando si imposta il valore del parametro predefinito a qualcosa come

[1: "HIGH RISK", 2: "LOW RISK"] 

Nel codice, si sarebbe avere la vostra espressione di campo di testo come (dove risk_type è il campo di ricerca dal database):

$P{risk_types}.get($F{risk_type}) 

per gli elementi mancanti nella mappa, si otterrebbe un valore nullo, estendo l'espressione campo di testo per essere:

$P{risk_types}.get($F{risk_type}) ?: "UNDEFINED" 
1

Boolean.valueOf(!($P{accWise}.equals("AC") && $F{RQAC_ACCREJ}.equals("R"))) è utile per fornire più condizioni nelle proprietà ireport.