尝试在我的jsp模板中使用JSTL进行OR测试

时间:2010-07-28 01:54:49

标签: java jsp jstl el

我的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 /',并稍后使用它来显示相应的子菜单。

现在,如果他们在'/ Jobs / *'或应用程序根目录下,我想知道isJobs是真的,但是我的简单||不编译,它给了我这个错误:

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

请帮助,谢谢!

1 个答案:

答案 0 :(得分:1)

实际上,字符串连接在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>