2010-02-23 2 views
4

JSP 표현식 언어에 대한 함수를 정의 할 때 함수에 암시 적 객체 (예 : pageContext) 중 하나가 필요하다는 것을 지정하는 방법이 있습니까?JSP EL 함수에서 암시 적 객체에 액세스

나는 함수 ${my:href('a.jpg')}

public static String href(String fileName, PageContext pageContext) 

에 의해 구현 될 수 있지만 명시 적으로 함수에 내가 전화 할 때마다 PageContext에 합격해야하고 싶지 않은 정의합니다.

답변

1

좋을 수도 있지만 직접 할 방법이 없습니다. 또한 JSP EL 함수는 public static이어야하므로 해결 방법이 없습니다. 그래서 해결책은 평범한 구식 JSP 코드로 돌아 가야하는 것입니다

<% Helper my= new Helper (pageContext); %> 

Helper는 인자로 파일 이름을 취하는 일반 대중 방법이 있습니다

public String href (String fileName) { ... } 

이후

... ${my.href(...)} 
+0

직접 할 방법이 없지만 확실히 할 수 있습니다. Java 웹 앱에서 광범위하게 사용합니다. – Pointy

+0

스크립틀릿? 정말? -1 – Yevgeniy

2

당신에게 스레드 로컬 변수로 (필터 또는 무언가를 통해) stash하는 것을 제공하는 경우에만 "암시 적"객체에 액세스 할 수 있습니다. 그런 다음 몇 가지 유틸리티 클래스를 작성하여 어떤 상황에서든 얻을 수 있습니다. 일부 프레임 워크 (Stripes, 예를 들어) (yaay Stripes!)를 사용하면 비교적 쉽습니다.

+0

그래서 어떤 상황에서 정보 객체를 넣을 것입니다. 아마도 어딘가에 해시 맵을 사용합니다. 이렇게하면 어디서든 정보 객체를 쉽게 찾을 수 있지만 느립니다. 내 솔루션은 훨씬 빠르지 만 유연성이 떨어집니다. –

+1

속도가 느리지 않으며 해시 맵에 넣을 필요가 없습니다. (명백하게 해시 맵이나 어쨌든 보이는 해시 맵이 아니라, ThreadLocal이 구현되는 방법에 관한 문제입니다.) 개별 ThreadLocal 변수를 사용하여 다른 컨텍스트 개체를 저장하고 유틸리티 클래스 (싱글 톤 또는 정적 접근 자 함수)를 통해 액세스 할 수 있습니다). 스트립을 사용하면 하나의 일반 컨텍스트 객체를 유지할 수 있으므로 필요한 모든 것을 얻을 수 있습니다. – Pointy