[정리] EL :: Function
EL :: Function (함수)
EL도 파라미터를 사용할 수 있고.. 따라서 함수 사용도 가능합니다. (Java Bean과 다른 점이죠.) EL 문법으로 함수를 만들지는 않고 만들어 둔 자바 함수를 가져다가 사용할 수 있습니다. JSP 라는게 어짜피 MVC 패턴으로 놓고 보면 "VIEW"에 해당하는 것이기 때문에 원래 복잡한 로직은 Model, Controller에서 처리를 하는게 맞습니다. 그래서 스크립틀릿 같은게 지양되고 EL이 권장되는 거겠죠. 그럼에도 불구하고 함수를 사용할 수 있다는건 좀 아이러니 하기도 하네요.
EL의 함수는 이렇게 동작합니다.
1) 자바 클래스에서 사용하고자 하는 메소드를 클래스 멤버(static)로 선언합니다.
2) WEB-INF 밑에 TLD(Tag Library Descriptor;XML 타입) 파일을 가져다 놓습니다. (이때 WEB-INF 서브 폴더면 어디든 상관 없습니다.)
3) JSP에서 <%@ taglib %> 지시자로 해당 함수를 지정한 후, EL에서 사용합니다.
그럼 순서대로 소스를 보죠..
DicePlay.java
package foo;
public class DicePlay {public static int rollDice() {
int result = (int)(Math.random() * 6) + 1;
return result;
}}
DiceFunctions.tld
- <?xml version="1.0" encoding="UTF-8"?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
<tlib-version>1.2</tlib-version>
<short-name>DiceFunctions</short-name> - <uri>DiceFunctions</uri>
<function> - <name>rollIt</name>
- <function-class>foo.DicePlay</function-class>
- <function-signature>int rollDice()</function-signature>
- </function>
</taglib>
TldTest.jsp
- <%@ taglib prefix="mine" uri="DiceFunctions" %>
<p>${mine:rollIt() }</p>
현재(8.15) 이클립스에서 버그가 있는데, 함수 호출하는 부분에서 EL Syntax Error 라고 나옵니다. https://bugs.eclipse.org/bugs/show_bug.cgi?id=280621 원인도 나와있긴 한데.. 아직 패치는 나오지 않은 것 같습니다. 아니면 저 부분을 찾아서 디버깅 후 컴파일 하는 방법도 있겠네요 (...)
2010.2.6 현재 버그 수정되었습니다.
이것도 돌아가는게 DD와 비슷한데요. 특이한 점은 TLD 파일을 WEB-INF 어디에 놓던 간에 따로 경로 지정을 안해줘도 된다는 겁니다. <@taglib> uri 속성과 TLD 파일의 <uri>의 내용만 맞으면 어떤 형식으로 들어가도 상관은 없습니다. 그리고 prefix 속성(맘대로 지정할 수 있습니다.)이 있기 때문에 함수를 종류나 쓰임새 별로 묶을 때 그냥 한 곳에 다 때려밖고 prefix만 잘 줘도 충분해 보입니다. XML Namespace의 장점을 잘 살려넣은듯 보이네요.
만약 함수에 파라미터를 넘겨야 하는 경우엔, tld 파일을 아래와 같이 수정합니다.
- <function-signature>String toUpperCase(java.lang.String)</function-signature>
'Computer Science' 카테고리의 다른 글
JSTL 기초, Part 2: core 분석 (한글) (0) | 2012.03.20 |
---|---|
JSTL 기초, Part 1: Expression Language (한글) (0) | 2012.03.20 |
[정리] EL :: Basic (0) | 2012.03.20 |
ubuntu에서 GTK 개발환경 꾸미기 (0) | 2012.03.19 |
GNU 자유 문서 사용 허가서 1.2판 (0) | 2012.02.29 |