2012-04-24 21 views
17

Làm cách nào để phân tách các chuỗi được phân cách bằng dấu "/" bên trong trang jsp bằng JSTL?Làm cách nào để phân tách chính xác các chuỗi trong JSTL?

Tôi có một chuỗi ở định dạng này: **

"23/11/2010"

* . Đôi khi, các chuỗi có thể là như thế này: *

"1/1/2010"

* . tôi cần phải làm điều gì đó để chia chuỗi trong ba chuỗi con khác nhau: *

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

** Đây là bởi vì tôi cần phải đặt mỗi một trong số họ trong ba lĩnh vực văn bản khác nhau, như thế này:

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

tôi không thể tìm thấy bất kỳ ví dụ làm việc được nêu ra.

Cảm ơn trước!

Trả lời

42

Bạn có thể sử dụng chức năng fn:split() cho việc này.

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

Hãy chắc chắn rằng các định dạng ngày được xác nhận trước :) Nó sẽ dễ dàng hơn nếu đó là một java.util.Date, không phải là một java.lang.String. Sau đó, bạn có thể sử dụng <fmt:formatDate> để định dạng nó thành định dạng chuỗi tin cậy và cố định trước tiên. Nếu không, bạn cần phải thêm kiểm tra chiều dài mảng theo fn:length() và để ngăn chặn lỗ hổng tấn công XSS tiềm năng theo số fn:escapeXml().

+0

Đó là rất giảng dạy! cảm ơn BalusC ... – Lucas

+0

Bạn được chào đón. – BalusC

+1

Tôi có thể sử dụng foreach về điều này không? – Wax

7

Cần lưu ý cho bất kỳ ai khác tìm thấy câu hỏi này trong tìm kiếm của họ (như tôi đã làm) rằng JSTL có thẻ hữu ích <c:forTokens>. Điều này sẽ tách chuỗi đầu vào bằng dấu phân cách được cung cấp và sau đó lặp qua bộ sưu tập mã thông báo kết quả.

Như đã trình bày ở đây, đoạn code sau:

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

sẽ dẫn đến:

A 
B 
C 
D 

Tài liệu: JSTL core Tag forTokens

Các vấn đề liên quan