본문 바로가기

java

Custom Tags in JSP Pages

Custom tag는 Tag library 를 만들때처럼 복잡하지도 않고 jsp 를 이용해 만들수 있어 간편하다. Custom tag역시 jsp에 속해 같이 servlet화된다. view쪽에서의 공통된 부분을 tag화 시키는데 유용할 듯 하다.

다음예제는 날짜를 입력받아 현재날짜와의 차이를 구해 new 이미지를 표현해주는 로직을 tag화 시켜본것이다. 만들고 나서 생각하니 더 할일이 많지만 java methodtld정의를 통해 function화 하는 것이 더 나아보인다.

다음은 sun에서 제공하는 tutorial페이지이다.
http://java.sun.com/javaee/5/docs/tutorial/doc/bnalj.html

 

/WEB-INF/tags/dc.tag

<!--

//-------------------------------------------------------------------------------------------------

// 날짜 비교 Custom Tag

//-------------------------------------------------------------------------------------------------

 -->

<%@ tag language="java" pageEncoding="UTF-8"%>

 

<%@ tag import="java.util.Date"%>

<%@ tag import="java.util.Calendar"%>

 

<!-- input -->

<%@ attribute name="compareDate" rtexprvalue="true" required="true"%>

<%@ attribute name="comparePeriod" rtexprvalue="true" required="true"%>

 

<!-- output -->

<%@ variable name-given="isNew"%>

 

<%

 

//out.println(Integer.parseInt(compareDate.substring(0,4))+"<br>");

//out.println(Integer.parseInt(compareDate.substring(4,6))-1+"<br>");

//out.println(Integer.parseInt(compareDate.substring(6,8))+"<br>");

 

Date today = new Date();

Calendar nowCalendar = Calendar.getInstance();

nowCalendar.setTime(today);// 오늘로 설정.

 

Calendar compareCalendar = Calendar.getInstance();

compareCalendar.set(Integer.parseInt(compareDate.substring(0,4)), Integer.parseInt(compareDate.substring(4,6))-1, Integer.parseInt(compareDate.substring(6,8))); // 기준일로 설정. month의 경우 해당월수-1을 해줍니다.

 

//out.println("현재일자 : " + nowCalendar.get(Calendar.YEAR) + " " + (nowCalendar.get(Calendar.MONTH) + 1) + " " + nowCalendar.get(Calendar.DATE) + "<br/>");

//out.println("비교일자 : " + compareCalendar.get(Calendar.YEAR) + " " + (compareCalendar.get(Calendar.MONTH) + 1) + " " + compareCalendar.get(Calendar.DATE) + "<br/>");

 

int count = 0;

while (!compareCalendar.after(nowCalendar)) {

//while(compareCalendar(nowCalendar)){

 

           count++;

           compareCalendar.add(Calendar.DATE, 1); // 다음날로 바뀜

 

           //System.out.println ( compareCalendar.get ( Calendar.YEAR ) + " " + ( compareCalendar.get ( Calendar.MONTH ) + 1 ) + " " + compareCalendar.get ( Calendar.DATE ) + "" );

}

 

//out.println("기준일로부터 " + (count) + "일이 지났습니다.");

 

boolean isNew = false;

 

if(Integer.parseInt(comparePeriod) >= count){

           isNew = true;

}

 

jspContext.setAttribute("isNew", isNew);

%>

<jsp:doBody />


jsp에서 사용할 때

<%@ taglib prefix="custom" tagdir="/WEB-INF/tags" %>

<custom:dc compareDate="20081231" comparePeriod="3" >

<c:if test="${isNew == true}">

<img src="/images/new.gif"/>

           </c:if>

</custom:dc>

'java' 카테고리의 다른 글

구글날씨 api 이용하기  (5) 2009.01.23
Tag Library Function  (0) 2009.01.19
Java -classpath 옵션  (1) 2008.04.29
ClassLoader를 이용한 서버 종류 알아내기  (1) 2008.03.19
Tomcat과 JEUS에서의 EL  (0) 2008.01.22