2012-05-10 27 views
6

tôi muốn làm một cái gì đó như thế này:so sánh char trong EL biểu

<c:if test="${somestring.charAt(0)=='1'}"> 
tadaaaam 
</c:if> 

khi SomeString là "11011", nhưng nó không hoạt động. Tôi có thể in nó với

${somestring.charAt(0)} 

và nó là '1' nhưng so sánh ở trên không thành công. So sánh sau:

if(somestring.charAt(0)=='1') 

worx (điều kiện là đúng) trong Java thuần túy.

Bất kỳ ý tưởng nào?

+0

Không thể sao chép trên tomcat 7. Có thể bạn có thể hiển thị cho chúng tôi mã thực sự không hoạt động? – Affe

+0

Tôi chạy nó trên Tomcat 7. Có lẽ bạn đã không thêm thư viện JSTL vào dự án của bạn –

Trả lời

8

EL dường như gặp sự cố với char. Đây là cách duy nhất tôi có thể làm cho nó hoạt động.

<c:if test="${somestring.charAt(0) == '1'.charAt(0)}" > 
    tadaaaam 
</c:if> 
+0

Cảm ơn, nó hoạt động theo cách đó :) Tôi không biết rằng '1' là String trong trường hợp này. –

7

Hành vi chính xác như mong đợi và theo yêu cầu của đặc điểm kỹ thuật EL. Nếu bạn lấy phiên bản 2.2 của đặc tả EL, bạn cần xem phần 1.8.2 cung cấp các quy tắc cho toán tử '=='.

Các toán hạng trong trường hợp này là somestring.charAt(0) mà là một char'1' mà là một String (KHÔNG phải là một char) kể từ Strings chưa được phân định bởi một trong hai đơn hay ngoặc kép trong EL.

Cho chúng ta có chuỗi ký tự ==, sau đó dấu đầu dòng thứ sáu là 1.8.2 áp dụng và cả hai đều bị ép buộc với giá trị dài. Nhân vật sẽ bị ép buộc thành 49 (mã ASCII cho 1) và 1 được ép buộc thành 1. Đây không phải là kết quả mà bạn thấy.

Tôi đánh giá cao rằng đây không phải là những gì bạn mong đợi nhưng đó là hành vi được yêu cầu bởi đặc điểm kỹ thuật và được kích hoạt bởi thực tế là dấu nháy đơn trong EL delimit Strings không phải ký tự.

+0

Cảm ơn bạn đã trả lời. '1' cũng giống như String. Tôi đã suy nghĩ sai lầm rằng nó là một nhân vật, tôi phải đọc thêm đặc điểm kỹ thuật :) –