Tag JSTL if per stringhe uguali


90

Ho una variabile da un oggetto sulla mia pagina JSP:

<%= ansokanInfo.getPSystem() %>

Il valore della variabile è NAT che è corretto e desidero applicare determinati elementi di pagina per questo valore. Come si usa un tag per conoscere il caso? Ho provato qualcosa di simile

<c:if test = "${ansokanInfo.getPSystem() == 'NAT'}">      
   process  
</c:if> 

Ma quanto sopra non mostra nulla. Come dovrei farlo? Oppure posso usare anche scriptlet, ad es

<% if (ansokanInfo.getPSystem().equals("NAT"){ %>
process
<% } %>

Grazie per qualsiasi risposta o commento.


1
Puoi per favore elaborare getPSystem()e ansokanInfo? li imposti nella richiesta o accedendoli tramite import?
Santhosh

1
IIRC li stavo impostando nella richiesta e la soluzione (soluzione alternativa) era aggiornare websphere come detto da BalusC e quindi una versione più recente può invocare metodi bean tramite tag. Stavo usando websphere standard nella domanda e alcune versioni prima che jsp e jstl potessero eseguire metodi. Per favore trova la mia altra domanda in cui BalusC ci dice che stavo usando una versione di websphere che necessitava di una versione più recente per poter invocare i metodi.
Niklas R.

1
Quindi ora hai aggiornato il tuo server app a 8? e quella soluzione fallisce?
Santhosh

@SanKrish Non uso JSP adesso. Spero che funzioni per te e che sia stato aggiornato per le versioni più recenti dell'app server.
Niklas R.

Risposte:


145

Provare:

<c:if test = "${ansokanInfo.PSystem == 'NAT'}">

JSP / Servlet 2.4 (penso che sia il numero di versione) non supporta le chiamate al metodo in EL e supporta solo le proprietà. Gli ultimi contenitori servlet supportano le chiamate ai metodi (ad esempio Tomcat 7).


1
Ho aggiornato la mia risposta in base alla risposta di Jorn. Punta del cappello a lui.
Adam Gent

3
Ho rinunciato a JSP (X). Uso Moustache ( github.com/samskivert/jmustache ) o il mio linguaggio di creazione dei modelli JATL ( code.google.com/p/jatl ).
Adam Gent

1
Come faresti più stringhe? Deve esserci un modo migliore di<c:if test = "${ansokanInfo.PSystem == 'NAT' || ansokanInfo.PSystem == 'CAT'}">
Dillon

36
<c:if test="${ansokanInfo.pSystem eq 'NAT'}">

16

Penso che le altre risposte perdano un dettaglio importante riguardante il nome della proprietà da utilizzare nell'espressione EL. Le regole per la conversione dai nomi dei metodi ai nomi delle proprietà sono specificate in 'Introspector.decpitalize` che fa parte dello standard java bean:

Questo normalmente significa convertire il primo carattere da maiuscolo a minuscolo, ma nel caso speciale (insolito) quando c'è più di un carattere e sia il primo che il secondo carattere sono maiuscoli, lo lasciamo stare.

Quindi "FooBah" diventa "fooBah" e "X" diventa "x", ma "URL" rimane come "URL".

Quindi nel tuo caso il codice JSTL dovrebbe essere simile al seguente, nota la "P" maiuscola:

<c:if test = "${ansokanInfo.PSystem == 'NAT'}">

2
Getter e setter con una convenzione di denominazione sono praticamente la definizione di un java bean. Immagino che abbiamo bisogno di qualche informazione in più riguardo a dove la variabile viene passata al jsp. Per essere disponibile per EL, deve essere in un certo ambito, ad esempio come richiesta o attributo pageContext. Una variabile locale creata da un blocco di script non sarebbe disponibile per EL.
Jörn Horstmann

5

È possibile utilizzare scriptlet, tuttavia, questa non è la strada da percorrere. Gli scriplet inline odierni o il codice JAVA nei file JSP sono considerati una cattiva abitudine.

Dovresti leggere un po 'di più su JSTL. Se l'oggetto ansokanInfo è nella tua richiesta o nell'ambito della sessione, stampare l'oggetto (metodo toString ()) in questo modo: $ {ansokanInfo} può darti alcune informazioni di base. $ {ansokanInfo.pSystem} dovrebbe chiamare il metodo getter dell'oggetto. Se tutto funziona, puoi usare questo:

<c:if test="${ ansokanInfo.pSystem  == 'NAT'}"> tataa </c:if>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.