2010-04-12 2 views
16

requestScope.importMe 파일 오류가 발생되지 않도록를 포함하기 전에 존재하는 경우JSP로 파일을 포함/가져 오기 전에 파일이 있는지 어떻게 확인할 수 있습니까?

<c:choose> 
    <c:when test="${!empty requestScope.importMe && fileExists(requestScope.importMe) }"> 
    <c:import url="${requestScope.importMe}" /> 
    ... 
</c:choose> 

는 어떻게 확인할 수있는 JSP 파일의 경로를 기대하고 있다고 가정하면?

JSTL 태그를 사용하는 솔루션을 선호합니다.

답변

21

c:catch 태그에 넣습니다. 그것은 당신을 위해 Exception 던져 잡을 것입니다.

<c:catch var="e"> 
    <c:import url="${url}" /> 
</c:catch> 
<c:if test="${!empty e}"> 
    Error: ${e.message} 
</c:if> 

나는 그러나 나는 c:catch 접근 방식을 싫어하는 것을 인정해야합니다. 흐름을 제어하는 ​​것은 학대의 예외입니다. 가능하다면 서블릿에서 JavaBean 대신에 File#exists() (및 ServletContext#getRealPath())을 사용하여이 작업을 수행하십시오.

+0

안녕하세요 @BalusC! 나는 또한 귀하의 대답에 주어진 것과 같은 구현을 찾고 있습니다. 나는 게시물을 검색하지만 귀하의 대답이 내 요구를 이행하는 가장 쉬운 방법이라고 생각하며 이미 물어 본 것에 관해서 다시 질문 할 필요는 없습니다. 동적 URL을 jstl로 가져와야합니다. 특정 지역 (예 : ./3/myJspx.jspx)의 URL을로드하려고합니다. 파일을 찾을 수없는 경우 기본 지역 jspx : ./myJspx로 폴백합니다. .jspx .. 당신의 대답에 많은 시간이 흘렀다는 것을 감안할 때, 다른 솔루션을 생각해 내거나 다른 힌트를 얻었습니까? – gipinani

4

@BalusC는 매우 영리하며 아마도 질문에 대답합니다.

그러나 완전하기 위해서는 표준 JSTL의 어떤 것도 원하는대로 할 수는 없지만 검사에 사용할 수있는 자신 만의 EL 함수를 만들 수는 있습니다. 당연히 Java 용으로 작성해야하지만 JSP 내에서 인라인되지는 않습니다.

J2EE 1.4 자습서에는 사용자 고유의 EL 기능을 만들 때 section이 있습니다.

+0

자신의 자바를 만드는 것에 대한 자세한 내용은이 스택에 설명되어 있습니다. 오버 플로우 질문 ... http : //stackoverflow.com/questions/16788790/include-css-file-in-jsp-only-if-it-exist –

+0

@WillHartung : 위 섹션 링크는 더 이상 언급했던 섹션으로 이동하지 않습니다 (제 생각 엔) 너무 크지 않은 경우 질문의 주요 부분을 포함 시키거나 링크를 수정 할 수 있습니까? – yochannah