JSP/Servlet – 커스텀 액션에 변수를 사용해보자
커스텀 액션에 변수를 선언하려면 variable 지시자를 사용해야 합니다.
<%@variable name-given="변수이름"%>
이렇게 선언한 변수는 기본적으로 String 타입이 됩니다.
변수의 타입을 설정할 때는 variable-class라는 애트리뷰트를 추가하면 됩니다.
<%@variable name-given="변수이름" variable-class="java.lang.Integer"%>
선언한 변수를 태그파일내 뿐만 아니라 커스텀 액션의 본체 밖에서 사용하고자 한다면 scope 애트리뷰트를 추가하면 됩니다.
<%@variable name-given="변수이름" variable-class="java.lang.Integer" scope="사용범위" %>
사용 범위는 NESTED, AT_BEGIN, AT_END 중에 한 값을 지정할 수 있습니다. NESTED는 커스텀 액션 본체 안에서만 사용할 수 있고
AT_BEGIN은 커스텀 액션의 시작 태그 다음부터, AT_END는 커스텀 액션의 끝 태그 다음부터 사용할 수 있습니다.
variable 지시자를 이용해서 변수를 선언한 다음 값을 대입하려면 JSTL의 커스텀 액션인 <c:set>을 사용해야 합니다.
<c:set var="변수이름" value="50" />
변수의 값을 가져오기 위해서는 EL식을 사용하면 됩니다.
${변수 이름}
위와 같이 JSTL 라이브러리를 lib 폴더에 넣고 tags 폴더에는 태그파일 그리고 Maximum.jsp파일을 프로젝트에 구성합니다.
max.tag
<%@tag pageEncoding="euc-kr"%>
<%@tag body-content="empty"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@attribute name="num1" type="java.lang.Integer"%>
<%@attribute name="num2" type="java.lang.Integer"%>
<%@variable name-given="maximum" variable-class="java.lang.Integer" scope="AT_END" %>
<%
int result;
if(num1 > num2)
result = num1;
else
result = num2;
%>
<c:set var="maximum" value="<%= result %>" />
Maximum.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@taglib prefix="util" tagdir="/WEB-INF/tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
최대값 구하기 <BR>
<util:max num1="${param.NUM1 }" num2="${param.NUM2 }" /> <BR>
최대값 : ${maximum }
</body>
</html>
실행 화면
최대값 구하는 max 커스텀 액션이 잘 동작합니다.
이번에는 커스텀 액션을 다음과 같이 만들어보겠습니다.
<util:max var="MAX" num1="${param.NUM1 }" num2="${param.NUM2 }" />
이렇게 애트리뷰트를 이용해서 변수를 지정할 때는 var라는 애트리뷰트를 미리 태그파일에 선언해야합니다.
또한 이 애트리뷰트를 필수 애트리뷰트로 만들기 위해 required 애트리뷰트를 추가하고 true로 놓습니다.
그리고 애트리뷰트에 스크립팅 요소나 익스프레션 언어를 값으로 지정할 수 없도록 하기위해 rtexprvalue 애트리뷰트를 false로 지정해야합니다.
<%@attribute name="var" required="true" rtexprvalue="false" %>
변수를 선언하는 variable지시자도 name-given애트리뷰트가 아닌 name-from-attribute를 이용해서 지정합니다. 그리고 태그 파일안에서 사용할 변수는
alias 애트리뷰트를 이용해서 할 수 있습니다.
<%@variable name-from-attribute="var" alias="maximum"
variable-class="java.lang.Integer" scope="AT_END" %>
다시 위와 같이 파일을 구성해 봅시다.
max.tag
<%@tag pageEncoding="euc-kr"%>
<%@tag body-content="empty"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@attribute name="var" required="true" rtexprvalue="false" %>
<%@attribute name="num1" type="java.lang.Integer"%>
<%@attribute name="num2" type="java.lang.Integer"%>
<%@variable name-from-attribute="var" alias="maximum"
variable-class="java.lang.Integer" scope="AT_END" %>
<%
int result;
if(num1 > num2)
result = num1;
else
result = num2;
%>
<c:set var="maximum" value="<%= result %>" />
Maximum.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@taglib prefix="util" tagdir="/WEB-INF/tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
최대값 구하기 <BR>
<util:max var="MAX" num1="${param.NUM1 }" num2="${param.NUM2 }" /> <BR>
최대값 : ${MAX }
</body>
</html>
실행 화면
결과는 위와 같습니다.
마지막으로 커스텀 액션의 본체 안에서 변수를 사용하는 방법을 알아봅시다.
커스텀 액션의 본체 안에서만 변수를 사용할 수 있도록 하기 위해 사용 범위를 'NESTED'로 지정해야합니다.
<%@variable name-from-attribute="var" alias="number"
variable-class="java.lang.Integer" scope="NESTED"%>
위와 같이 예제를 구성합니다.
compute.tag
<%@tag pageEncoding="euc-kr" %>
<%@tag body-content="scriptless" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@attribute name="var" required="true" rtexprvalue="false" %>
<%@attribute name="start" type="java.lang.Integer" %>
<%@attribute name="end" type="java.lang.Integer" %>
<%@variable name-from-attribute="var" alias="number"
variable-class="java.lang.Integer" scope="NESTED"%>
<% for(int cnt=start; cnt <= end; cnt++){ %>
<c:set var="number" value="<%= cnt %>" />
<jsp:doBody/>
<% } %>
Square.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@taglib prefix="util" tagdir="/WEB-INF/tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
제곱 테스트<BR>
<util:compute var="num" start="1" end="5">
${num }의 제곱 = ${num * num } <BR>
</util:compute>
</body>
</html>
실행 화면
실행을 하면 커스텀 액션이 제대로 동작하는 것을 알 수 있습니다.
'프로그래밍 > JSP Servlet' 카테고리의 다른 글
JSP/Servlet - 태그 클래스를 이용한 본체가 있는 커스텀 액션 만들기 (0) | 2016.02.29 |
---|---|
JSP/Servlet – 동적 애트리뷰트를 지원하는 태그 클래스 만들기 (0) | 2016.02.23 |
JSP/Servlet – 태그클래스를 이용해서 애트리뷰트가 있는 커스텀 액션 만들기 (1) | 2016.02.23 |
JSP/Servlet – SimpleTagSupport 클래스를 이용해서 태그 클래스 작성하기 (0) | 2016.02.22 |
JSP/Servlet – 커스텀 액션에 body를 추가해보자 (0) | 2016.02.21 |
JSP/Servlet – 동적 애트리뷰트를 지원하는 태그 파일 만들기 (0) | 2016.02.18 |
JSP/Servlet – 애트리뷰트를 지원하는 태그 파일 만들기 (0) | 2016.02.18 |
JSP/Servlet – 태그 파일을 이용해서 커스텀 액션 만드는 방법 (0) | 2016.02.14 |