2012-04-24 17 views
17

Come posso dividere le stringhe separate da "/" all'interno di una pagina jsp utilizzando JSTL?Come dividere correttamente le stringhe in JSTL?

Ho una stringa in questo formato: **

"23/11/2010"

* . A volte, la stringa potrebbe essere simile a questo: *

"1/1/2010"

* . Ho bisogno di fare qualcosa al fine di dividere la stringa in tre diverse sottostringhe: *

"23", "11", "2010".

** questo è perché ho bisogno di mettere ognuno di loro all'interno di tre diversi campi di testo, come questi:

<input type="text" value="23">/ 
<input type="text" value="11">/ 
<input type="text" value="2010"> 

non ho potuto trovare alcun esempio di lavoro ancora.

Grazie in anticipo!

risposta

42

Per questo è possibile utilizzare la funzione fn:split().

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> 
... 
<c:set var="dateParts" value="${fn:split(dateString, '/')}" /> 
... 
<input type="text" name="day" value="${dateParts[0]}" /> 
<input type="text" name="month" value="${dateParts[1]}" /> 
<input type="text" name="year" value="${dateParts[2]}" /> 

Assicurarsi che il formato della data è convalidati prima :) sarebbe più facile se fosse un java.util.Date, non un java.lang.String. È quindi possibile utilizzare <fmt:formatDate> per formattare prima un formato stringa affidabile e fisso. Altrimenti dovresti aggiungere controlli sulla lunghezza dell'array per fn:length() e per prevenire potenziali fori di attacco XSS entro il fn:escapeXml().

+0

Questo è stato molto istruttivo! grazie BalusC ... – Lucas

+0

Prego. – BalusC

+1

Posso usare foreach su questo? – Wax

7

Vale la pena notare per tutti gli altri che trovano questa domanda nella loro ricerca (come ho fatto) che JSTL abbia il tag utile <c:forTokens>. Questo dividerà la stringa di input da un delimitatore fornito e quindi itererà sulla raccolta risultante di token.

Come dimostrato qui, il seguente codice:

<c:forTokens items="A,B,C,D" delims="," var="mySplit"> 
    <c:out value="${mySplit}"/></br> 
</c:forTokens> 

comporterebbe:

A 
B 
C 
D 

Documentazione: JSTL core Tag forTokens

Problemi correlati