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 함수를 작성하고 사용하는 방법을 알아보았습니다.
※ 예제소스
'프로그래밍 > 스프링프레임워크' 카테고리의 다른 글
Apache PDFBox 라이브러리를 사용해서 PDF 파일 만들기 (0) | 2018.04.20 |
---|---|
Servlet/jsp, PHP, Javascript로 리다이렉트하기(HTTP 응답코드 지정) (0) | 2018.04.20 |
JSTL - jsp 페이지에서 jstl을 사용하여 HTML tag 제거하기 (4) | 2018.04.20 |
Spring + Quartz 주기적으로 작업 실행하기 (12) | 2018.04.20 |
전자정부표준프레임워크 Tomcat + jndi로 dataSource 사용하기 (0) | 2018.04.20 |