Можете ли вы использовать JSTL c: if для проверки шаблона URL? - PullRequest
6 голосов
/ 05 декабря 2011

Я пытаюсь использовать условие JSP, которое работает с текущим URL.По сути, я хочу что-то сделать, если URL заканчивается на /my-suffix, НЕ включая строку запроса и т. Д. Поэтому мне нужно проверить подстроку URL, которая находится прямо посередине.

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

Есть лиспособ сделать это?

Ответы [ 3 ]

14 голосов
/ 05 декабря 2011

Оформление функций JSTL taglib . Одной из доступных функций является fn:endsWith(). Это позволяет вам, например, сделать:

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

(${pageContext.request.requestURI} возвращает HttpServletRequest#getRequestURI(), который не включает строку запроса)

Или, если вы уже находитесь в Servlet 3.0-совместимом контейнере, который, таким образом, поставляется вместе с EL 2.2, таким как Tomcat 7, Glassfish 3 и т. Д., То вы также можете просто вызывать методы с аргументами напрямую, например String#endsWith():

<c:if test="${not pageContext.request.requestURI.endsWith('/my-suffix')}">
    <p>URL does not end with /my-suffix.</p>
</c:if>
4 голосов
/ 26 августа 2015

Дальнейшее добавление к ответу BalusC с использованием следующего также сработало бы, если вы хотите сопоставить строку в любом месте URL:

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

Sidenote: Ни один из наших ответов не охватывает то, что предлагает заголовокхотя (сопоставление с образцом), но это не то, что ОП хотел сделать в своем посте.Это на самом деле немного сложнее, но все же выполнимо (очевидно, jstl не имеет встроенного соответствия регулярному выражению).Если кому-то нужно сделать это, создайте отдельный пост и свяжите меня с ним, и я постараюсь помочь вам.

0 голосов
/ 29 мая 2014

Сначала вам нужно будет разделить URL-адрес и фрисби параметры запроса, затем проверить, используя end-with и т. Д. ... кажется грязным.

Вы могли бы просто проверить, находится ли строка в пути вообще?

ЧТО СДЕЛАТЬ >> 1005 *

Получите путь и установите переменные для URL и строки, которую вы хотите оценить:

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

Теперь проверьте, находится ли ваша строка в пути, используя indexOf (возвращает -1, если строка НЕ ​​найдена):

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

** Я новичок в JSTL / EL и использую эту логику только для довольно обыденной задачи - добавления активного класса к кнопке навигации, если это текущая страница. Я не рекомендовал бы этот метод для чего-либо коммерчески чувствительного! Удачи.

...