Custom tag는 Tag library 를 만들때처럼 복잡하지도 않고 jsp 를 이용해 만들수 있어 간편하다. Custom tag역시 jsp에 속해 같이 servlet화된다. view쪽에서의 공통된 부분을 tag화 시키는데 유용할 듯 하다.
다음예제는 날짜를 입력받아 현재날짜와의 차이를 구해 new 이미지를 표현해주는 로직을 tag화 시켜본것이다. 만들고 나서 생각하니 더 할일이 많지만 java method를 tld정의를 통해 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 |