attributo test nel tag JSTL <c:if>
Domanda
Ho visto del codice come il seguente in un JSP
<c:if test="<%=request.isUserInRole(RoleEnum.USER.getCode())%>">
<li>user</li>
</c:if>
La mia confusione riguarda il "=" che appare nel valore di test
attributo.La mia comprensione era che qualsiasi cosa fosse inclusa all'interno <%= %>
viene stampato nell'output, ma sicuramente il valore assegnato a test deve essere booleano, quindi perché funziona?
Per i punti bonus, esiste un modo per modificare il valore dell'attributo sopra in modo tale che non utilizzi il codice scriptlet?Presumibilmente, ciò significa utilizzare invece EL.
Saluti, Don
Soluzione
Tutto ciò che test
L'attributo cerca per determinare se qualcosa è vero è la stringa "true" (senza distinzione tra maiuscole e minuscole).Ad esempio, il codice seguente stamperà "Hello world!"
<c:if test="true">Hello world!</c:if>
Il codice all'interno di <%= %>
restituisce un valore booleano, quindi stamperà la stringa "true" o "false", che è esattamente ciò che <c:if>
il tag cerca.
Altri suggerimenti
Puoi anche usare qualcosa di simile
<c:if test="${ testObject.testPropert == "testValue" }">...</c:if>
L'espressione tra <%= %> viene valutata prima del tag c:if.Quindi, supponendo che | request.isuserInrole | restituisce | vero |, il tuo esempio verrebbe valutato per primo:
<c:if test="true">
<li>user</li>
</c:if>
e quindi il tag c:if verrebbe eseguito.
Gli attributi nelle librerie di tag JSP in generale possono essere statici o risolti al momento della richiesta.Se vengono risolti al momento della richiesta, JSP risolverà il loro valore in fase di esecuzione e trasmetterà l'output al tag.Ciò significa che puoi inserire praticamente qualsiasi codice JSP nell'attributo e il tag si comporterà di conseguenza in base all'output prodotto.
Se guardi i documenti della taglib jstl puoi vedere quali attributi sono più richiesti e quali no. http://java.sun.com/products/jsp/jstl/1.1/docs/tlddocs/index.html
<%=%> da solo verrà inviato all'output, nel contesto del JSTL verrà valutato in una stringa