2011-12-05 23 views
5

Sto provando ad avere un condizionale JSP che opera sull'URL corrente. Fondamentalmente voglio fare qualcosa se l'URL finisce in /my-suffix, NON includendo la stringa di query ecc. Quindi ho bisogno di testare una sottostringa dell'URL che è proprio nel mezzo.Puoi usare JSTL c: se testare contro un pattern url?

<c:if test="url not including query string+ ends with '/my-suffix'"> 
    do something... 
</c:if> 

C'è un modo per farlo?

risposta

12

Acquista il JSTL functions taglib. Una delle funzioni disponibili è fn:endsWith(). Questo ti permette di fare per esempio:

<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> 
... 
<c:if test="${not fn:endsWith(pageContext.request.requestURI, '/my-suffix')}"> 
    <p>URL does not end with /my-suffix.</p> 
</c:if> 

(i rendimenti ${pageContext.request.requestURI}HttpServletRequest#getRequestURI() che non comprende la stringa di query)

Oppure, se siete già in un contenitore di 3.0 compatibile servlet che viene in tal modo insieme a EL 2.2, come ad esempio Tomcat 7, Glassfish 3, ecc, allora si può anche solo richiamare i metodi con argomenti direttamente, come ad esempio String#endsWith():

<c:if test="${not pageContext.request.requestURI.endsWith('/my-suffix')}"> 
    <p>URL does not end with /my-suffix.</p> 
</c:if> 
+0

Che ne dici di eliminare la stringa di query, ecc.? Request.requestURI non include quella parte? –

+0

@Tony: no, non è così, come indicato nella mia risposta (fare clic sul collegamento javadoc per vedere le prove autorevoli * "... fino alla stringa di query ..." *). È un problema? O non l'hai provato? – BalusC

+0

Heh grazie BalusC, sono solo distratto con altre cose. Ogni volta che riesco a lavorarci di nuovo, sono sicuro che la tua risposta verrà accettata (come se avessi bisogno del rappresentante!) = P –

0

Firs Dovresti fare una divisione nell'url, e frisbee i parametri della query, quindi controllare usando ends-with etc ... sembra un po 'complicato.

Si può semplicemente controllare se la stringa è nel percorso?

per farlo >>

ottenere il percorso e impostare Vars per l'URL e la stringa che si desidera valutare:

<c:set var="url" value="${ pageContext.request.requestURI }" /> 
<c:set var="stringToHunt" value="Your-String-Here" /> 

Ora controllare se la stringa è nel percorso utilizzando indexOf (ritorni - 1 se la stringa non viene trovata):

<c:if test="${ fn:indexOf(url , stringToHunt) ne -1 }"> 
    This page does not contain your string! 
</c:if> 

** sono nuovo di JSTL/EL e sto soltanto seguendo questa logica per un compito abbastanza banale - l'aggiunta di una classe di attivo a un pulsante di navigazione se è la corrente pagina. Non consiglierei questo metodo per qualcosa di commercialmente sensibile! Buona fortuna.

4

per aggiungere ulteriore alla risposta di BalusC utilizzando il seguente sarebbe anche funzionare se stai cercando di abbinare una stringa in qualsiasi parte del url:

<c:if test="${fn:contains(pageContext.request.requestURI, 'my-string')}"> 
    <p>URL Contains my string</p> 
</c:if> 

Nota a margine: Nessuna delle nostre risposte coprire ciò che il titolo sta suggerendo però (pattern matching) ma non è quello che l'OP stava cercando di fare nel suo post. Questo è in realtà un po 'più complicato ma comunque fattibile (jstl non ha una corrispondenza regolare costruita apparentemente). Se qualcuno ha bisogno di farlo, crea un post separato e collegami ad esso e cercherò di aiutarti.

Problemi correlati