<getter / setter 메서드>

// 전체페이지 갯수

public int getTotalPage(){

             return (int)((total-1)/list_cnt) + 1;

}

              

// 목록의 페이지 설정

public void setPage(int page){                

             this.page = page;

}

            

// 출력될 목록의 갯수 설정

public void setList_cnt(int list_cnt){             

             this.list_cnt = list_cnt;

}

 

// 검색필드 설정

public void setField(String field){

             this.field = field;

}

                         

// 검색어 설정

public void setKey(String key){

this.key = key;

}

// Where 절 설정

private String getWhere(){

             String where;

             if(field == null || field.length() == 0){

                          where = "";

             }else{

                          where = "WHERE " + field + " LIKE '%" + key + "%'";                                      

             }

             return where;

}

 

 

5. 태그핸들러 클래스 작성

 

우선 어떤 태그 핸들러 클래스가 필요한지 생각해보도록 하겠습니다.

이미 만든 NoticeList 클래스는 목록을 벡터로 리턴합니다. 리턴된 벡터를 루프를 돌면서 화면에 각 요소별로 출력시켜주는 태그핸들러 클래스가 필요할 것입니다.

지금까지 올라온 강좌내용을 코딩해 보신 분이시라면 무릎을 치시겁니다.

그렇죠?? 이미 이 클래스는 IterateTag.java 와 IterateTEI.java 라는 파일로 만드셨을 겁니다.

하시만 기존의 클래스는 벡터가 아닌 컬렉션을 처리하도록 되어 있습니다. 컬렉션 을 벡터로 바꾸는 건 간단합니다.

 

그리고, Newline (\n)을 <BR> 태그로 바꾸어줄 태그도 있으면 좋겠죠?? 이 유틸리티 클래스는 글내용을

보는 부분을 작성하면서 같이 만들어 보도록 하겠습니다.

 

그럼 어떤 부분들이 수정되어야 하는지 살펴 보죠..


 

<IterateTag.java>

………

………

public class IterateTag extends BodyTagSupport{

………

<중략>

………

             public void setVector(Vector vector){

                      if(vector.size() > 0){

                                 iterator = vector.iterator();

                      }                     

           }

………

<중략>

………

}

 

위의 볼드체로 표시된 부분에서 인자로 받는 부분과 이 인자의 데이터 타입을 Vector로 바꾸기만 하면 됩니다.

다음은 태그라이브러리 스크립터 에서 인자(attribute) 로 선언된 부분중 collection으로 된 부분을 vector로 바꾸기만 하면 됩니다.

 

< taglib_1_0.tld >

………

<중략>

………

<tag>

                          <name>iterate</name>

                          <tagclass>tag.IterateTag</tagclass>

                          <teiclass>tag.IterateTEI</teiclass>

                          <bodycontent>JSP</bodycontent>

                          <info>A Simple Iterator</info>

                          <attribute>

                                       <name>vector</name>

                                       <required>true</required>

                                       <rtexprvalue>true</rtexprvalue>

                          </attribute>

                          <attribute>

                                       <name>name</name>

                                       <required>true</required>

                          </attribute>

                          <attribute>

                                       <name>type</name>

                                       <required>true</required>

                          </attribute>

</tag>

………

<중략>

………

 

 

자 이정도면 목록 출력까지는 문제가 없을 것 같군요

이제 list.jsp 페이지를 작성하도록 하겠습니다.

 

<list.jsp>

 

<%@ page contentType="text/html;charset=EUC-KR" %>

<%@ taglib uri="taglib" prefix="tl"%>

<%

// 파라미터로 받는 값을 초기화하고 조건에 맞도록 설정하는 부분

String PAGE = null;

String field = null;

String key = null;

int current_page;

 

PAGE = request.getParameter("PAGE");

field = request.getParameter("FIELD");

key = request.getParameter("KEY");

 

if(PAGE == null){

             current_page = 1;

}else{

             current_page = Integer.parseInt(PAGE);

}

 

if(field != null){

             key = new String(key.getBytes("8859_1"),"euc-kr"); // 한글처리

}else{

             field = "";

             key = "";

}

%>

<jsp:useBean id="NoticeList" class="notice.NoticeList" scope="request"/>

<jsp:setProperty name="NoticeList" property="page" value="<%=current_page%>"/>

<jsp:setProperty name="NoticeList" property="list_cnt" value="7"/>

<jsp:setProperty name="NoticeList" property="field" value="<%=field%>"/>

<jsp:setProperty name="NoticeList" property="key" value="<%=key%>"/>

<%

int total = NoticeList.getTotal();

int total_page = NoticeList.getTotalPage();

%>

 

위의 부분은 대략 이해 하실수 있으리라 생각합니다.

.. 특별한 건 없죠..

파라미터로 받는 값들을 초기화하고 설정하는 부분과 빈즈에 이 값을 넣어서 목록을 가져올 준비를 하는 부분 입니다.

 

<jsp:setProperty name="NoticeList" property="list_cnt" value="7"/>

 

은 출력될 목록의 개수를 설정하는 부분입니다. 여러분의 입맛에 맞도록 적당한 값으로 설정하시면 됩니다.

 

<%

int total = NoticeList.getTotal();

int total_page = NoticeList.getTotalPage();

%>

 

은 왜 필요할까요??

 

처음 말씀드린것처럼 공지사항에도 페이징 구현을 하겠다고 말씀드렸습니다.

페이징을 구현하기 위해서는 전체 글의 개수와 한 페이지당 출력될 목록의 개수 그리고 이를 바탕으로 전체 페이지의 개수가 필요합니다.

 

그래서 이러한 값을 계산하기 위해 빈즈내에 메서드를 추가한겁니다.(NoticeList.java 를 참고하세요)

 

그럼 계속해서 목록을 출력하는 부분을 살펴 보겠습니다.

 

…………

<중략>

…………

<table width=703 cellpadding=0 cellspacing=0 border=0>

<tr height=24 align=center>

             <td width=13%>번 호</td>

             <td width=68%>제&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;목</td>

             <td width=13%>작 성 일</td>

             <td width=10%>조 회</td>

</TR>

<tl:iterate name="notice" vector="<%=NoticeList.getList()%>" type="notice.NoticeRec">

<TR>

             <TD align=center><jsp:getProperty name="notice" property="num"/></TD>

             <TD>

<a href="view.jsp?PAGE=<%=current_page%>&KEY=<%=key%>&FIELD=<%=field%>&NO=<jsp:getProperty name="notice" property="no"/>">

             <jsp:getProperty name="notice" property="subject"/>

             </a>

             </TD>

             <TD align=center><jsp:getProperty name="notice" property="regi_date"/></TD>

             <TD align=center><jsp:getProperty name="notice" property="cnt"/></TD>

</TR>

<tr height=1 align=center><td colspan=4 ></td></tr>

</tl:iterate>

</TABLE>

…………

<중략>

…………

 

위에서 눈여겨 보실 부분은

 

<tl:iterate name="notice" vector="<%=NoticeList.getList()%>" type="notice.NoticeRec">

 

입니다.

 

위 태그는 몸체를 반복적으로 처리하는 태그 입니다.

각 요소에 대한 접근은

 

<jsp:getProperty name="notice" property="프로퍼티명"/>

 

와 같이 하면 됩니다.

주의 하실 점은 몸체를 처리하므로 </ti:iterate> 를 반드시 써주셔야 합니다.

 

태그에 대한 자세한 설명은 지난 강좌를 참고하세요..

 

태그로 처리가 되어 DB Handling 부분이 전혀 안보입니다. 게다가 while 이나 for 등의 스크립틀릿도 전혀 없구요.. 바로 커스텀 태그의 장점이라 할 수 있습니다.