Попытка сделать ИЛИ тест с JSTL внутри моего шаблона JSP - PullRequest
1 голос
/ 28 июля 2010

у меня есть следующий код из моего JSP, который не совсем работает:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>

<c:set var="contextPath" value="${pageContext.request.contextPath}" />
<c:set var="requestURI" value="${pageContext.request.requestURI}" />
<c:set var="isPeople" value="${fn:contains(requestURI, '/People/')}" />
<c:set var="isJobs"   value="${fn:contains(requestURI, '/Jobs/') || fn:endsWith(requestURI,contextPath+'/')}" />

По сути, isPeople работает нормально - он проверяет, есть ли у пользователя какие-либо из моих страниц, на которых есть '/ People /' в URL, и использует его позже для отображения соответствующего подменю.

Теперь я хочу, чтобы isJobs были правдой, если они находятся в '/ Jobs / *' или в корне приложения, но мой простой || не компилируется, выдает ошибку:

An exception occurred processing JSP page /sitemesh/main.jsp at line 7

Пожалуйста, помогите, спасибо!

1 Ответ

1 голос
/ 28 июля 2010

Действительно, конкатенация строк в EL не работает таким образом.

Должно работать следующее:

<c:set var="contextPath" value="${pageContext.request.contextPath}/" />
<c:set var="requestURI" value="${pageContext.request.requestURI}" />
<c:set var="isPeople" value="${fn:contains(requestURI, '/People/')}" />
<c:set var="isJobs"   value="${fn:contains(requestURI, '/Jobs/') || fn:endsWith(requestURI, contextPath)}" />

Обратите внимание, что я переместил косую черту с fn:endsWith на <c:set value>.

...