[jsp]나만의 custom tag 만들기

지금은 jsp로 페이지를 개발할 때, jstl등을 많이 쓰겠지만 필요에 따라서는 나만의

커스텀태그를 만들어사용하면 jsp내에서도 코드의 모듈화가 가능해지고 코드도

훨씬 깔끔하다. 그래서 간단하게 테스트해보았다.

(1)  커스텀태그를 수행할 클래스 만들기

public class TagFunctionTest {
	public static Integer plus(Integer x, Integer y) {
		return x+y;
	}

	public static Integer times(Integer x, Integer y) {
		return x*y;
	}
}

public class GreetCustumTagTest extends SimpleTagSupport {
	private String username;

	public void setUsername(String username) {
		this.username = username;
	}

	@Override
	public void doTag() throws JspException, IOException {
		if ("bluepoet".equals(username)) {
			getJspBody().invoke(null);
		}
	}
}

이때, 주의할 것은 메서드의 리턴값이든 인자값이든 모두 primitive 타입은 안된다.

int 대신 Integer 랩퍼클래스를 사용해야 한다.

그리고, SimpleTagSupport를 상속받은 클래스는 doTag 메서드를 실행하며,

속성으로 받은 값을 setter method로 가져와서 사용하게 된다.

(2) WEB-INF/ 밑 적절한 위치에 .tld 파일 만들기

*hello.tld
<short-name>hello</short-name>
<uri>http://glider.com/helloglider</uri>
<tag>
	<name>greet</name>
	<tagclass>com.glider.framework.tags.GreetCustumTagTest</tagclass>
	<bodycontent>scriptless</bodycontent>
	<attribute>
		<name>username</name>
		<required>true</required>
		<rtexprvalue>false</rtexprvalue>
	</attribute>
</tag>

*function.tld
<short-name>gdf</short-name>
<uri>http://glider.com/gdftags</uri>

<function>
	<name>plus</name>
	<function-class> com.glider.framework.tags.TagFunctionTest</function-class>
	<function-signature>
		java.lang.Integer plus(java.lang.Integer, java.lang.Integer)
	</function-signature>
</function>

<function>
	<name>times</name>
	<function-class> com.glider.framework.tags.TagFunctionTest</function-class>
	<function-signature>
		java.lang.Integer times(java.lang.Integer, java.lang.Integer)
	</function-signature>
</function>

(3) 사용하고자 하는 jsp에서 커스텀태그 선언후 사용하기

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@taglib prefix="gdf"  uri="http://glider.com/gdftags"%>
<%@taglib prefix="hello"  uri="http://glider.com/helloglider"%>
<html>
<body>
[커스텀태그 테스트]
* 플러스 커스텀태그 테스트 : ${gdf:plus(1,2)}

* 곱하기 커스텀태그 테스트 : ${gdf:times(2,2)}

* 커스텀 문자열 인사 :
<hello:greet username="bluepoet">bluepoet 너 맞구나!!!</hello:greet>
</body>
</html>

(4) 결과

username 속성에 “bluepoet”을 주지 않게 되면

bluepoet 너 맞구나!!! 문자열이 보이지 않게 된다^^

* 참고사이트

 

Advertisements

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중