[JSP] 커스텀 태그 예제(동적으로 속성 전달하기)

예제 상황

- 동적으로 select 태그와 option  태그를 만들어서 selectbox 만들기

 

<%@ tag language="java" pageEncoding="UTF-8"%>
<%@ tag trimDirectiveWhitespaces="true"%>
<%@ tag dynamic-attributes="optionMap"%>
<%@ attribute name="name" required="true"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<select name="${name}">
	<c:forEach items="${optionMap}" var="option">
	<option value="${option.key}">${option.value}</option>	
	</c:forEach>
</select>

- 태그파일 : dynamic-attributes 속성에 정의되어있는 optionMap이라는 변수명으로 각각의 key와 value에 접근하여 들어온 모든 name 속성이 아닌 속성과 값으로 option 태그를 만들어 select 태그 안에 넣어주는 역할을 한다.

- attribute 디렉티브를 보면 name 속성으로 name이라는 변수명을 가지고 select 태그에서 ${name} 값에 해당하는 값을 select 태그의 name 값으로 할당합니다. required 속성이 true이므로 name 속성이 아래 jsp에서 정의되지 않으면 에러가 발생합니다. 나머지는 c:forEach 태그로 optionMap을 포문돌아서 option 태그를 생성해주는 것입니다.

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="tf" tagdir="/WEB-INF/tags" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<tf:select name="code" rgb="RGB 모드" wb="흑백 모드"/>

<tf:select name="genre" rock="락" ballad="발라드" metal="메탈"/>

</body>
</html>

- jsp에서 태그파일 활용

- select 태그에 name 속성값과 이후 rgb, wb, rock, ballad, metal 과 같은 속성들은 동적으로 생성되는 것을 확인할 수 있다.

- name 속성을 지정하지 않는다면 에러가 발생할 것입니다.

 

댓글

Designed by JB FACTORY