개발/JSP

Custom tag 라이브러리 만들기

신매력 2013. 4. 9. 10:45

옛날엔 태그라이브러리를 사용하기 귀찮고 복잡?했다고 한다
지금은 간단히 쓸 수 있도록 JSTL이 업데이트 됐다.

사용법 두 가지를 설명하겠다.



1. 템플릿(jsp)


user 객체의 id값으로 name을 받아오는 예제이다.


... taglib들 생략 
<% taglib prefix="custom" tagdir="/WEB-INF/tags" %>


태그로 출력한 <custom:test returnColumn="name" id="${user.id}"  /><br/>   

<custom:user returnColumn="name" id="${user.id}" var="value" />

EL태그로 출력한 ${value.name}



결과 >>


태그로 출력한 사자고양이

EL태그로 출력한 사자고양이



${value.name} 이렇게 쓸 수 있는 것은,  tag 파일에서 attribute에 set을 해주기 때문이다


custom : prefix
user : 태그 파일 이름 (여기서는 /WEB-INF/tags/user.tag 이다)
returnColumn, id, var : 속성이다. 속성의 이름은 tag 파일에서 지정한다.




2. tag 파일(test.tag)

로직은 대충 되어있으니 사용법만 볼 것.

<%@ tag body-content="empty" pageEncoding="UTF-8"%>
<%@ tag import="org.springframework.web.context.WebApplicationContext,
                    org.springframework.web.servlet.support.RequestContextUtils,
                        com.test.service.TestService" %>

<%@ attribute name="returnColumn" required="true" %>
<%@ attribute name="id" required="false" %>
<%@attribute name="var" required="false
" %>
<%
    // bean을 가져온다
    WebApplicationContext ctx = RequestContextUtils.getWebApplicationContext(request, request.getServletContext());
    UserService userService = (UserService) ctx.getBean("userService");
    Object returnValue = null;

    if (returnColumn.equals("name")) {
        returnValue = userService.getId("name");  // 처리
     }

    if (null != var) {

      // 두번째 방법 - attribute에 set 한다
        ctx.getServletContext().setAttribute(var, returnValue);  
    } else {

        // 첫번째 방법 - 출력해버린다
        out.print(returnValue);   
    }
%>