의 차이를 볼 실패 실제로는 스크립트 렛 없이는 완전히 완료 할 수 있습니다. 내가 c:set
에 "캐시"를 사용주의,
여기
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<html>
<head>
<title>My Events - <decorator:title /></title>
<link href="${pageContext.request.contextPath}/assets/styles.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div class="tabs">
<a
${fn:contains(pageContext.request.requestURI, '/events/') ? 'class="selected"' : ''}
href="${pageContext.request.contextPath}/events/Listing.action">Events</a>
<a
${fn:contains(pageContext.request.requestURI, '/people/') ? 'class="selected"' : ''}
href="${pageContext.request.contextPath}/people/Listing.action">People</a>
</div>
<div class="submenu">
<c:if test="${fn:contains(pageContext.request.requestURI, '/events/')}">
<a href="Listing.action">List of Events</a>
|<a href="New.action">New Event</a>
</c:if>
<c:if test="${fn:contains(pageContext.request.requestURI, '/people/')}">
<a href="Listing.action">List of People</a>
|<a href="New.action">New Person</a>
</c:if>
</div>
좀 더 최적화 된 재입니다 : 여기
는
JSTL
core 및
functions 태그 라이브러리 (단지
/WEB-INF/lib
에서
jstl-1.2.jar
드롭) 다른 사람들의 도움으로 1 일에 재 작성의 expression 결과를 재사용하고 모든 링크에 컨텍스트 경로를 지정하는 것을 피하기 위해 HTML
<base>
태그를 사용합니다 (웹 페이지의 상대적 URL은 모두 - 슬래시없이 - 슬래시없이 -!) :
<%@ 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="isEvents" value="${fn:contains(pageContext.request.requestURI, '/events/')}" />
<c:set var="isPeople" value="${fn:contains(pageContext.request.requestURI, '/people/')}" />
<html>
<head>
<title>My Events - <decorator:title /></title>
<base href="${pageContext.request.contextPath}">
<link href="assets/styles.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div class="tabs">
<a ${isEvents ? 'class="selected"' : ''} href="events/Listing.action">Events</a>
<a ${isPeople ? 'class="selected"' : ''} href="people/Listing.action">People</a>
</div>
<div class="submenu">
<c:if test="${isEvents}">
<a href="Listing.action">List of Events</a>|<a href="New.action">New Event</a>
</c:if>
<c:if test="${isPeople}">
<a href="Listing.action">List of People</a>|<a href="New.action">New Person</a>
</c:if>
</div>
events
및 people
과 같은 하드 코드 된 값을 모두 수집하고 응용 프로그램 범위의 Map
에 텍스트를 연결하고 각 JSTL <c:forEach>
에서 텍스트를 사용하여 탭을 표시하는 경우 실제로 최적화 할 수 있습니다. 당신의 실제 질문에 관해서는
을 수행 할 수 있습니다 비활성화 스크립트 릿 (및 사용에 대한 런타임 오류를 얻을) 웹 애플리케이션의 web.xml
에 다음 항목을 추가하여. 그것은 전체 스크립틀릿을 찾는 데 도움이 될 수 있습니다.
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<scripting-invalid>true</scripting-invalid>
</jsp-property-group>
</jsp-config>
EL에 대해 자세히 알아 보려면 Java EE tutorial part II chapter 5을 확인하십시오. ${pageContext}
과 같은 암시 적 EL 객체는 here으로 설명됩니다. JSTL에 대해 자세히 알아 보려면 Java EE tutorial part II chapter 7을 확인하십시오. JSTL과 EL은 별개의 두 가지 사항입니다. JSTL은 표준 태그 라이브러리이며 EL은 프로그래밍 방식으로 백엔드 데이터에 액세스 할 수 있도록합니다. JSTL과 같은 taglib에서 일반적으로 사용되지만 템플릿 텍스트에서도 독립 실행 형으로 사용할 수 있습니다.
제쳐두고 '<% = request.getContextPath() %>'는 너무 많이 싫어하는 스크립틀릿을 사용할 수 있습니까? – Chris
템플릿 작성을 위해 facelets 사용을 시작해야합니다. 코드를 올바르게 작성하도록합니다. –
sitemesh 대신 facelet을 사용 하시겠습니까? – Chris