본문 바로가기
IT/JAVA

[JSP] TLD를 활용하여 jsp에서 <c:set>으로 데이터 받기

by 꾼헨 2023. 8. 2.
728x90
반응형
활용한 이유

홈페이지 개발 중 메인페이지에 최근 게시물들을 불러오는 부분이 있다.

MainController.java에서 게시판별로 게시물을 조회하여

model.addAttribute("noticeList", noticeList);  // 공지사항
model.addAttribute("galleryList", galleryList); // 갤러리

이런식으로 값을 넘겨줘야만 index.jsp에서 해당 변수를 사용할 수 있었다.

 

메인페이지에 표시할 게시판의 변동이 없다면 상관이 없는데..

CMS 특성상 새로운 게시판 추가/삭제가 자유로워 만약 "뉴스"라는 게시판이 신설되고

클라이언트가 이를 메인페이지에 추가해달라고 한다면 개발자는 java소스를 수정해서 컴파일하고 배포해야한다.

환경에 따라 서버를 재기동해야하기 때문에 수정사항이 바로 반영되는 jsp단에서만 수정할 수 있다면 편리할것이다.

 

그래서 TLD를 추가하고 이를 활용해 게시글 데이터를 가져오도록 할 것이다.

 

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.1</tlib-version>
	<short-name>doc</short-name>
	<uri>/WEB-INF/META-INF/doc.tld</uri>
	<function>
		<name>getRecentDocList</name>
		<function-class>mypackage.home.common.util.DocUtil</function-class>
		<function-signature>java.util.List getRecentDocList(java.lang.Integer)</function-signature>
	</function>
</taglib>
  • 위치 : src/main/webapp/WEB-INF/META-INF/doc.tld
    • JSP 2.0 이상인 경우 WEB-INF하위에 작성하면 자동 인식됨
    • JSP버전 확인법 : <%= JspFactory.getDefaultFactory().getEngineInfo().getSpecificationVersion() %>
  • short-name은 doc
  • function name은 getRecentDocList
  • 함수명은 getRecentDocList이며, 리턴 자료형은 List, 파라미터의 자료형은 Integer
  • 파라미터가 여러 개라면 getRecentDocList(java.lang.String, java.lang.Integer)와 같이 지정
DocUtil.java 생성
@Component
public class DocUtil {
  
    //
    // 보안상 생략.
    // 사용할 서비스가 있다면 inject
    //
    
    public static List<DocVO> getRecentDocList(Integer bbsSeq) {

        List<DocVO> resultDocList = null;

	//
        // 보안상 생략
        //
        
        return resultDocList;
    }

}
index.jsp에서 사용
<%@ taglib prefix="doc" uri="/WEB-INF/META-INF/doc.tld" %>
<c:set var="bbsSeq" value="106"/>
<c:set var="docList" value="${doc:getRecentDocList(bbsSeq)}"/>

<c:forEach var="bean" items="${docList}" varStatus="i">
	<c:out value="${bean.field1}"/> - <c:out value="${bean.field2}"/>
</c:forEach>
  • doc.tld에서 지정한 대로 ${doc:getRecentDocList(bbsSeq)}와 같이 사용
  • 리턴값을 docList 변수에 담음
  • docList를 forEach돌려 출력(자료형에 따라 알맞게 사용)
728x90
반응형