2012-04-24 19 views
17

¿Cómo puedo dividir cadenas separadas por "/" dentro de una página jsp utilizando JSTL?¿Cómo dividir correctamente las cadenas en JSTL?

que tienen una cadena en este formato: **

"23/11/2010"

* . A veces, la cadena podría ser así: *

"1/1/2010"

* . tengo que hacer algo con el fin de dividir la cadena en tres subseries diferentes: *

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

** Esto se debe a que tengo que poner cada uno de ellos dentro de tres campos de texto diferentes, como los siguientes:

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

no pude encontrar ningún ejemplo de trabajo todavía.

¡Gracias de antemano!

Respuesta

42

Puede usar la función fn:split() para esto.

<%@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]}" /> 

Asegúrese de que el formato de la fecha es validado de antemano :) Sería más fácil si se trataba de un java.util.Date, no un java.lang.String. A continuación, puede usar <fmt:formatDate> para formatearlo primero en un formato de cadena fiable y fijo. De lo contrario, necesitaría agregar controles en la longitud de la matriz por fn:length() y para evitar posibles agujeros de ataque XSS por fn:escapeXml().

+0

Eso fue muy instructivo! gracias BalusC ... – Lucas

+0

De nada. – BalusC

+1

¿Puedo usar foreach en esto? – Wax

7

Vale la pena señalar para cualquier otra persona que encuentre esta pregunta en su búsqueda (como lo hice) que JSTL tiene la útil etiqueta <c:forTokens>. Esto dividirá la cadena de entrada por un delimitador proporcionado y luego iterará sobre la colección resultante de tokens.

Como se ha demostrado aquí, el siguiente código:

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

resultaría en:

A 
B 
C 
D 

Documentación: JSTL core Tag forTokens

Cuestiones relacionadas