2013년 8월 8일 목요일

[ORACLEJAVA커뮤티니, oraclejavanew.kr]Struts Bean 커스텀 태그

Struts Bean 커스텀 태그

자바 빈과 관련된 프로퍼티에 접근 하는데 이용되며 페이지 scope 속성들과 변수의 기술을 통해 페이지의 나머지 부분에서 쉽게 접근 할 수 있도록 자바 빈을 정의하는데 사용 됩니다.

또한 Bean 태그 라이브러리의 태그들에서는 요청 쿠키, 헤더 그리고 파라미터 값을 기반으로 하는 새로운 빈을 생성 해야 하는 경우 편리하게 이용 할 수 있는 메커니즘도 제공 합니다.

아래는 Bean 태그 라이브러리의 커스텀 태그들 입니다.


Custom tags within the Bean tag library

cookie : 지정한 요청 쿠키의 값에 근거해 변수를 정의
define : 지정한 빈 프로퍼티에 값에 근거해 변수를 정의
header : 지정한 요청 헤더의 값에 근거해 변수를 정의
include : 동적인 애플리케이션 요청의 응답을 로드해 빈으로 이용 할 수 있게 함
message  : 국제화된 메시지를 표시
page : 지정한 아이템을 빈으로써 페이지 문맥에서 꺼냄
parameter : 지정한 요청 파라미터에 근거해 변수를 정의
resource : 웹애플리케이션의 자원을 로드해 빈으로 이용 할 있게 함
size : Collection 또는 Map 요소의 개수를 포함한 빈을 정의
struts : 지정한 스트럿츠 내부 설정 객체를 빈으로
write : 지정한 빈 프로퍼티의 값을 표시


1.define 태그

지정한 빈의 프로퍼티 값을 꺼내 현재 페이지의 나머지 부분에서 접근 할  수 있도록 정의 합니다.반환되는 프로퍼티 값이 자바 원시 데이터 타입인 경우를 제외하고는 형 변환이 일어 나지 않습니다. 단 자바 원시데이터 타입인 경우엔 이 원시 데이터 타입의 래퍼형으로 변환 됩니다. (int 형이면 Integer로…)


[예:게시판의 VIEW 구현 시 이용]

<td width=490 style= "padding-left:10 ">
<bean:define id="content” name="boardForm" property="boardValue.content"/ >
<%= BoardUtils.convertHtmlBr((String)content) %>
< / t d >

2.header 태그

name으로 지정된 요청 헤더 값을 꺼내 String 타입의 페이지 scope 속성으로 정의

multiple 속성에 null이 아닌 값을 설정 한 경우 id 속성은 HttpServletRequest.getHeader() 대신 HttpServletRequest.getHeaders()를 호출하여 얻은 결과값을 포함 합니다.

[예제: 아래 예제는 요청 헤더와 헤더 값을 출력 합니다.]

<%@ page pageEncoding="euc-kr" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<html>
<body>
<%
java.util.Enumeration names =
((HttpServletRequest) request).getHeaderNames();

while (names.hasMoreElements()) {
String name = (String) names.nextElement();
%>

<bean:header id="head" name="<%= name %>"/>
 <br>Header Name : <%= name %> = <%= head %>
 
<%
}
%>
</body>
</html>

[결과]

Header Name : accept = */*
Header Name : accept-language = ko,en;q=0.5
Header Name : accept-encoding = gzip, deflate
Header Name : user-agent = Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)
Header Name : host = localhost
Header Name : connection = Keep-Alive
Header Name : cookie = JSESSIONID=EF8A4D1130ADFD06F6E78BE2A7BA9801

3.include 태그

지정한 애플리케이션 컴포넌트(또는 외부의URL)에 내부적으로 요청을 보내 수행 하고 이때 얻은 응답을 String 타입의 빈으로 만듭니다. 이때 생성된 빈은 id 속성의 값을 변수 명으로 가지며 페이지 scope에 저장 됩니다.

이 태그는 <jsp:include>와 비슷합니다. 그러나 표준 <jsp:include>에서는 해당 컴포넌트를 수행해서 얻은 응답을 직접 출력 스트림에 쓰는 반면 Bean 태그라이브러리의 include 태그에서는 페이지 범위를 가지는 빈으로 저장하는 것이 차이가 있습니다.

아래 처럼 include 태그를 이용해서 페이지 범위의 빈에 저장

<bean:include id="footerSpacer" page="/long/path/footerSpacer.jsp"/>

이제 페이지의 적절한 곳에서 <bean:write>를  이용하여 출력 할 수 있습니다.

<bean:write name="footerSpacer" />

[예제-test.jsp]
<%@page pageEncoding="euc-kr" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<html>
<body>
<bean:include id="inc" page="/include.jsp"/>
<br>
원래 페이지의 내용...<br>
<bean:write name="inc"/>
<br>========================<br>
<bean:write name="inc"/>
</body>
</html>

[include.jsp]
include되는 페이지의 출력...


4.message 태그

스트럿츠 태그 라이브러리에서 가장 널리 이용되는 태그 중 하나이며 지정된 메시지 키를 이용하여 국제화된 메시지를 꺼내와 출력 스트림에 출력 합니다. “{0}”와  같은 파라미터 치환을 5개까지 허용 합니다.

메시지를 꺼내오기 위해서는 key 속성을 사용하여 직접 지정 할 수도 있으며 name과 property 속성을 사용하여 빈에서 간접적으로 꺼내 올 수도 있습니다. 그리고 bundle 속성에는 MessageResources 객체를 얻어 올 수 있는 애플리케이션 범위의 빈의 이름을 지정 할 수도 있습니다. Locale 속성을 지정하지 않은 경우 필요한 locale은 세션에서 키 Action.LOCALE_KEY를 사용하여 얻습니다.

아래는 간단한 예 입니다.

<head>
<html:base/>
<title><bean:message key="title.login"/></title>
    </head>

5.parameter 태그

지정된 요청 파라미터의 값을 꺼내 String 타입의 페이지 범위의 속성으로 정의 합니다. 만약 multiple 속성에 null 이 아닌 값이 설정 될 경우에는 getParamter() 대신 getParameters() 메소드를 호출하고 String[] 타입의 페이지 범위 속성을 정의 합니다. 


오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷 실무전문 강의)  


<bean:parameter id="param1" name="param1"/>
<bean:parameter id="param2" name="param2" multiple="true"/>
<bean:parameter id="param3" name="param3" value="UNKNOWN VALUE"/>


6.resource 태그

지정된 웹 에플리케이션 자원의 값을 꺼내 input 속성의 값에 따라 InputStream이나 String 타입의 한 형태로 사용 할 수 있게 합니다. input 속성의 값이 null이 아닌 값인 경우 InputStream을 생성하며 그 외에는 String으로 로딩 합니다.

<bean:resource id="webxml" name="/WEB-INF/web.xml"/>

얻어진 정보를 JSP 페이지에서 보기 위해서는 아래처럼 하면 됩니다.

<pre>
<bean:write name="webxml" filter=”true” />
</pre>

[예제]
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<html>
<body>
<bean:resource id="webxml" name="/WEB-INF/web.xml"/>
<pre>
<bean:write name="webxml" filter=”true” />
</pre>
</body>
</html>

7.write 태그

빈 프로퍼티의 값을 꺼내 String 형태로 출력하는 태그로써 자주 사용되는 것입니다. 즉 자바 빈에서 속성 값을 get 하는 것 입니다. 만약 filter 속성이 “true” 이면 “<” 인 경우 <로 변환 됩니다. 

댓글 없음:

댓글 쓰기