유틸리티 클래스의 정적 메소드로 커스텀 EL 함수 만들기

프로그래밍/스프링프레임워크 2018. 4. 20. 23:33
반응형

jstl의 functions EL 함수는 jsp 페이지에서 간편하게 사용할수 있는 fn:replace(), fn:length(), fn:substring() 등의 함수를 제공합니다. 기본적으로 제공되는 기능외에 다른 기능들이 필요하다면 정적 메소드를 가지는유틸리티 클래스를 만들고, 이 정적메소드를 호출하는 커스텀 EL 함수를 만들어서 사용할 수 있습니다. 예제의 전체소는 글 하단에 첨부되어 있습니다.



1. 테스트용 정적 메소드


예제로 만들어 볼 StrUtil 클래스의 replaceAll() 함수는 그냥 String 객체의 replaceAll() 함수를 호출하도록 되어 있습니다.


package com.tistory.pentode;


public class StrUtil {

public static String replaceAll(String str, String regex, String replacement) {

    return str.replaceAll(regex, replacement);

}

}



2. TLD 태그라이브러리 설명자 만들기


위의 replaceAll() 함수가 어떻게 호출될지 지정합니다. 예제에서는 ${str:replaceAll()} 형태로 사용할 수 있도록 지정합니다. 파일의 위지는 /WEB-INF/tlds/str.tld 파일입니다. tlds 폴더는 임의로 생성하면 됩니다. 폴더 이름이 반드시 tlds일 필요는 없습니다.


<?xml version="1.0" encoding="UTF-8"?>

<taglib version="2.1"

    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/javaee/web-jsptaglibrary_2_1.xsd" >


    <tlib-version>1.0</tlib-version>

    <short-name>str</short-name>

    <uri>http://pentode.tistory.com/jsp/str</uri>


    <function>

        <name>replaceAll</name>

        <function-class>com.tistory.pentode.StrUtil</function-class>

        <function-signature>java.lang.String replaceAll(java.lang.String, java.lang.String, java.lang.String)</function-signature>

    </function>


</taglib>



3. web.xml 파일에 tld 파일의 위치를 지정합니다.


<jsp-config>

   <taglib>

       <taglib-uri>http://pentode.tistory.com/jsp/str</taglib-uri>

       <taglib-location>/WEB-INF/tlds/str.tld</taglib-location>

   </taglib>

</jsp-config>



4. 컨트롤러에서 jsp 파일에서 출력할 내용을 보냅니다.


@RequestMapping(value = "/home.do", method = RequestMethod.GET)

public String home(Locale locale, Model model) {

    model.addAttribute("contents", "<p>테스트용 <strong>문자열</strong> 입니다.</p>");

    return "home";

}



5. jsp 파일에서 커스텀 태그를 사용합니다.


/WEB-INF/view/home.jsp 파일 입니다.


<%@ page contentType="text/html; charset=utf-8" %>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<%@ taglib prefix="str" uri="http://pentode.tistory.com/jsp/str" %> 

<!DOCTYPE html>

<html lang="ko">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<title>Custom El Function</title>

</head>

<body>

<p><c:out value='${str:replaceAll(contents, "\\\<.*?\\\>","")}' /></p>

</body>

</html>


prefix 를 "str" 로 지정하고, uri는 web.xml 파일에 기술한 uri인 http://pentode.tistory.com/jsp/str 을 적습니다.


${str:replaceAll(contents, "\\\<.*?\\\>","")}


위와 같이 사용할 수 있는 이 예는 문자열에서 태그를 제거하는 것입니다.



6. 실행결과 입니다.




태그는 제거되고 문자열만 남았습니다.


이상으로 정적 함수를 사용하여 간단한 커스텀 EL 함수를 작성하고 사용하는 방법을 알아보았습니다.


※ 예제소스


반응형

댓글을 달아 주세요