Computer >> 컴퓨터 >  >> 프로그래밍 >> 프로그래밍

JSP 커스텀 태그에 속성(Attribute)을 추가하는 방법 – setter 메서드와 TLD 설정 가이드

JSP 커스텀 태그에 속성 추가하기

사용자 정의(커스텀) 태그에는 다양한 속성(attribute)을 함께 사용할 수 있습니다. 상위 JSP 페이지에서 전달된 속성 값을 받아 처리하려면, 커스텀 태그 클래스가 JavaBean의 setter 메서드와 동일한 형태의 setter 메서드를 구현해야 합니다.

1. Setter 메서드 구현하기

아래 예제는 message라는 속성을 받아 출력하는 HelloTag 클래스입니다.

package com.tutorialspoint;

import javax.servlet.jsp.tagext.*;
import javax.servlet.jsp.*;
import java.io.*;

public class HelloTag extends SimpleTagSupport {
    private String message;
    public void setMessage(String msg) {
        this.message = msg;
    }
    StringWriter sw = new StringWriter();
    public void doTag()
    throws JspException, IOException {
        if (message != null) {
            /* 속성으로 전달된 message 사용 */
            JspWriter out = getJspContext().getOut();
            out.println( message );
        } else {
            /* 태그 바디(body)의 내용 사용 */
            getJspBody().invoke(sw);
            getJspContext().getOut().println(sw.toString());
        }
    }
}

속성 이름이 "message"이므로 setter 메서드 이름은 setMessage()가 됩니다. JSP 컨테이너는 태그가 실행될 때 이 setter 메서드를 자동으로 호출하여 속성 값을 주입합니다.

doTag() 메서드의 로직을 살펴보면, message 속성 값이 존재하면 해당 값을 그대로 출력하고, 값이 없으면 태그 바디의 내용을 StringWriter로 읽어와 대신 출력합니다. 즉, 하나의 태그로 속성 기반 출력과 바디 기반 출력을 모두 지원할 수 있습니다.

2. TLD 파일에 속성 선언하기

작성한 속성을 실제로 사용하려면 TLD(Tag Library Descriptor) 파일에 <attribute> 요소를 추가하여 등록해야 합니다.

<taglib>
    <tlib-version>1.0</tlib-version>
    <jsp-version>2.0</jsp-version>
    <short-name>Example TLD with Body</short-name>

    <tag>
        <name>Hello</name>
        <tag-class>com.tutorialspoint.HelloTag</tag-class>
        <body-content>scriptless</body-content>

        <attribute>
            <name>message</name>
        </attribute>

    </tag>
</taglib>

<attribute> 요소에는 필요에 따라 다음과 같은 하위 요소를 추가로 지정할 수 있습니다.

  • <required> : 해당 속성이 필수인지 여부를 지정합니다. (true / false)
  • <rtexprvalue> : EL 표현식이나 스크립틀릿 같은 런타임 표현식으로 속성 값을 지정할 수 있는지 여부를 결정합니다.

3. JSP에서 속성과 함께 태그 사용하기

이제 message 속성을 전달하며 커스텀 태그를 사용하는 JSP 페이지를 작성해 보겠습니다.

<%@ taglib prefix = "ex" uri = "WEB-INF/custom.tld"%>

<html>
    <head>
        <title>A sample custom tag</title>
    </head>

    <body>
        <ex:Hello message = "This is custom tag" />
    </body>
</html>

실행 결과

위 JSP를 실행하면 message 속성으로 전달한 문자열이 화면에 그대로 출력됩니다.

This is custom tag

이처럼 setter 메서드 구현과 TLD 파일의 <attribute> 선언만으로 커스텀 태그에 속성을 손쉽게 추가할 수 있으며, 이를 활용하면 재사용성이 높은 유연한 JSP 태그 라이브러리를 만들 수 있습니다.