2011-12-05 16 views
5

Tôi đang cố gắng có điều kiện JSP hoạt động trên URL hiện tại. Về cơ bản tôi muốn làm điều gì đó nếu URL kết thúc bằng /my-suffix, KHÔNG bao gồm chuỗi truy vấn, v.v. Vì vậy, tôi cần phải kiểm tra dựa trên chuỗi con của url ở ngay giữa.Bạn có thể sử dụng JSTL c: nếu để kiểm tra dựa trên mẫu url?

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

Có cách nào để thực hiện việc này không?

Trả lời

12

Thanh toán JSTL functions taglib. Một trong các chức năng có sẵn là fn:endsWith(). Điều này cho phép bạn ví dụ làm:

<%@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> 

(các ${pageContext.request.requestURI} lợi nhuận HttpServletRequest#getRequestURI() mà không bao gồm các chuỗi truy vấn)

Hoặc, nếu bạn đã có trên một Servlet 3.0 chứa tương thích mà vì nó được cùng với EL 2.2, chẳng hạn như Tomcat 7, Glassfish 3, vv, sau đó bạn có thể cũng chỉ cần gọi phương pháp với lập luận trực tiếp, chẳng hạn như String#endsWith():

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

Điều gì về việc loại bỏ chuỗi truy vấn, v.v ...? Có request.requestURI không bao gồm phần đó không? –

+0

@Tony: không, nó không, như đã nêu trong câu trả lời của tôi (nhấp vào liên kết javadoc để xem bằng chứng có thẩm quyền * "... lên đến chuỗi truy vấn ..." *). Đó có phải là vấn đề không? Hay bạn đã không thử nó? – BalusC

+0

Heh cảm ơn BalusC, tôi chỉ bị phân tâm với những thứ khác. Bất cứ khi nào tôi nhận được xung quanh để làm việc trên này một lần nữa tôi chắc chắn câu trả lời của bạn sẽ được chấp nhận (như thể bạn cần đại diện!) = P –

0

Firs t bạn sẽ cần phải làm một phân chia trên url, và frisbee params truy vấn, sau đó kiểm tra bằng cách sử dụng kết thúc-với vv ... có vẻ lộn xộn.

Bạn chỉ có thể kiểm tra xem chuỗi có nằm trong đường dẫn không?

để làm điều đó >>

Lấy đường dẫn và thiết vars cho URL và chuỗi bạn muốn đánh giá:

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

Bây giờ kiểm tra xem chuỗi của bạn là trong đường dẫn sử dụng indexOf (lợi nhuận - 1 nếu chuỗi là không tìm thấy):

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

** tôi mới vào JSTL/EL và đang chỉ sử dụng logic này cho một nhiệm vụ khá nhàm chán - thêm một lớp tích cực vào một nút nav nếu nó là hiện tại trang. Tôi sẽ không đề nghị phương pháp này cho bất cứ điều gì nhạy cảm về mặt thương mại! Chúc may mắn.

4

Tiếp tục thêm vào câu trả lời BalusC bằng cách sử dụng sau đây cũng sẽ làm việc nếu bạn đang tìm kiếm để phù hợp với một chuỗi bất cứ nơi nào trong url:

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

Sidenote: Cả câu trả lời của chúng tôi bao gồm những gì tiêu đề được gợi ý mặc dù (mô hình phù hợp) nhưng đó không phải là những gì OP đang tìm kiếm để làm trong bài viết của mình. Đó là thực sự ít hơn tham gia nhưng vẫn doable (jstl không có một regex phù hợp với xây dựng rõ ràng). Nếu ai đó cần phải làm điều đó tạo ra một bài viết riêng biệt và liên kết tôi với nó và tôi sẽ cố gắng giúp bạn ra ngoài.