EL 함수에서 세 개의 String 인수를 사용하여 ArrayList<HashMap<String,String>>
을 반환하고 싶습니다. 그렇게하는 방법?일반 arraylist 반환 유형 및 매개 변수가있는 el 함수
3
A
답변
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")}'/>
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<java.util.Map<java.lang.String,java.lang.String>> func(java.lang.String,java.lang.String,java.lang.String)
</function-signature>
</function>
주의 사항 :이 예와 같이, 꺾쇠 괄호가 제대로 XML에서 탈출해야합니다. 함수 서명 은 줄 바꿈 일 수 없습니다. Map<String,String>
과 같은 단항이 아닌 일반 제네릭은 매개 변수으로 사용할 수 없습니다. (아마도 토큰 화 버그입니다.) 원시 타입을 가지고 가야합니다.
소개 문안은 +1입니다. 나는 그러나 그가 그것을 필요로 할 것 인 것에 흥미가있을 텐데. 나는 그렇게 할 실제적인 이유가 있다고 상상할 수 없다. 값이 이미 JSP에서 하드 코드 된 경우, 왜 다른 Java 오브젝트로 변환합니까? 또는 값이 동적 일 때 왜 서블릿이나 빈을 잡아서 전처리하지 않을 것인가? – BalusC
글쎄요. 아마도 대부분의 경우 사용할 콩이 있지만 누가 알 수 있습니까? 원래 질문은 EL 기능을 설정하는 방법에 대해 질문했습니다. 어쨌든 EL 함수를 통해 빈을 확보하는 것이 훨씬 빠르고 빠르며, ''과 비교하여 클래스를 사용하는 모든 페이지에서 클래스 이름을 고정시킵니다. – Pointy
제네릭은 지원되지 않지만 반환 형식은 함수 시그니처의 java.util.List이고 메서드 시그니처의 목록이어야합니다. – BacMan