2010-02-21 8 views

답변

3

실제로 나는 EL 함수가 어떤 복잡한 객체를 리턴하는 것이 합리적이라고 생각합니다. 물론, 그러한 것들을 위해 적절한 상황이 될지도 모르는지를 지시 할 수도있는 "아키텍처 스타일"의 문제가 있지만, 좋은 예가 몇 가지 종류의 구성 정보를 반환하는 일부 기능이라고 말할 수 있습니다. 어떤 특정한 행동에 특정 적이며 백엔드 비즈니스 로직에 관심이 없으며 여러 페이지에서 프레젠테이션 목적으로 사용되기 쉽습니다.

이렇게하려면 "Object"또는 "Object []"를 반환하는 EL 함수가 필요합니다. EL 선언 (.tld 파일에서)에서 Java generics 항목을 사용할 수는 없지만 EL 환경이 스니핑 유형을 입력하기 때문에 중요하지 않습니다. 당신이 할 거라고하는 것은 어딘가에 클래스의 공용 정적 함수를 선언입니다 : 당신의 .TLD 파일에서

public static Object yourFunction(String arg1, String arg2, String arg3) { 
    // code code code 
    return (ArrayList<HashMap<String, String>>) whatever; 
} 

을, 당신이 이런 식으로 뭔가있을 것이다 : 당신의 JSP에서

<function> 
    <description>Blah blah blah</description> 
    <name>yourFunction</name> 
    <function-class>your.package.YourClassName</function-class> 
    <function-signature> 
    java.lang.Object yourFunction(java.lang.String, java.lang.String, java.lang.String) 
    </function-signature> 
</function> 

를, 당신 ' 이 같은 기능에 액세스 D :

<c:set var='result' value='${prefix:yourFunction("Goodbye", "Mr.", "Chips")}'/> 
+0

소개 문안은 +1입니다. 나는 그러나 그가 그것을 필요로 할 것 인 것에 흥미가있을 텐데. 나는 그렇게 할 실제적인 이유가 있다고 상상할 수 없다. 값이 이미 JSP에서 하드 코드 된 경우, 왜 다른 Java 오브젝트로 변환합니까? 또는 값이 동적 일 때 왜 서블릿이나 빈을 잡아서 전처리하지 않을 것인가? – BalusC

+0

글쎄요. 아마도 대부분의 경우 사용할 콩이 있지만 누가 알 수 있습니까? 원래 질문은 EL 기능을 설정하는 방법에 대해 질문했습니다. 어쨌든 EL 함수를 통해 빈을 확보하는 것이 훨씬 빠르고 빠르며, ''과 비교하여 클래스를 사용하는 모든 페이지에서 클래스 이름을 고정시킵니다. – Pointy

+0

제네릭은 지원되지 않지만 반환 형식은 함수 시그니처의 java.util.List이고 메서드 시그니처의 목록이어야합니다. – BacMan

5

당신 당신의 TLD에 사용하는 복잡한 반환 형식은 역시 할 수있다. 예 : 이 작동합니다 : 당신의 .TLD 파일에서

public static List<Map<String, String>> func(String arg1, String arg2, 
     String arg3) { 

    List<Map<String, String>> out = new ArrayList<HashMap<String, String>>(); 
    // code code code 
    return out; 
} 

, 당신은이를 넣어해야합니다 :

<function> 
    <description>Blah blah blah</description> 
    <name>func</name> 
    <function-class>your.package.YourClassName</function-class> 
    <function-signature> 
    java.util.List&lt;java.util.Map&lt;java.lang.String,java.lang.String&gt;&gt; func(java.lang.String,java.lang.String,java.lang.String) 
    </function-signature> 
</function> 

주의 사항 :이 예와 같이, 꺾쇠 괄호가 제대로 XML에서 탈출해야합니다. 함수 서명 은 줄 바꿈 일 수 없습니다. Map<String,String>과 같은 단항이 아닌 일반 제네릭은 매개 변수으로 사용할 수 없습니다. (아마도 토큰 화 버그입니다.) 원시 타입을 가지고 가야합니다.

관련 문제