다국어 문서를 처리할 때 유용하고, 날짜와 숫자 형식을 다루는 fmt 태그는 다음과 같은 종류가 있다.
기능 |
태그 |
prefix |
Locale 설정 |
setLocale, requestEncoding |
fmt |
메시지 처리 |
bundle, message(param), setBundle |
|
숫자 날짜 형식 |
formatNumber, formatDate, parseDate, parseNumber, setTimeZone, timeZone |
fmt 태그를 사용하기 위해서 페이지 상단에 다음과 같이 선언되어야 된다.
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
1. <fmt:setLocale/>
<fmt:setLocale/> 의 형식은 다음과 같다.
Syntax <fmt:setLocale value="locale" [variant="variant"] [scope="{page|request|session|application}"]/>
|
다국어 페이지를 만들 경우 사용할 경우 ResourceBundle 로 불러오는 *.properties 파일들과 연계되어서 사용할 수 있다. value 속성에 들어가는 locale 값은 [1][1]언어코드와 [2][2]국가코드로 이루어진다. 생략될 경우 톰캣 서버의 기본값으로 설정이 되고, 둘 중에 하나만 사용할 수도 있다.
예제 10. jstlfmt01.jsp |
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%> <pre> default locale : <%= response.getLocale() %> set locale : ko <fmt:setLocale value="ko" /> now: <%= response.getLocale() %> set locale : ja <fmt:setLocale value="ja" /> now: <%= response.getLocale() %> set locale : en <fmt:setLocale value="en" /> now: <%= response.getLocale() %> </pre> |
예제를 값을 변경시켜서 실행하면, response 쪽에 영향을 주는 것을 알 수 있다.
2. <fmt:requestEncoding/>
다음으로 볼 것은 request.setCharacterEncoding() 역할을 하는 <fmt:requestEncoding/> 태그이다. 형식은 다음과 같다.
Syntax <fmt:requestEncoding [value="charsetName"]/>
|
파라메터를 MS949 로 인코딩하는 경우 다음과 같이 사용하면 된다.
<fmt:requestEncoding value="MS949"/>
예제 11. jstlfmt02.jsp |
<%@ page contentType="text/html;charset=euc-kr" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> <fmt:requestEncoding value="euc-kr"/> 파라메터:<c:out value="${param.id}"/> <form method="post"> <input type="text" name="id"> <input type="submit"> </form> |
페이지 인코딩이 적용된 경우 request 에서 가져오는 parameter 와 맞지 않는 경우에 사용한다. 서버마다 차이가 있기 때문에, 테스트를 통해서 자신의 환경에 맞게 사용해야 된다.
예제 12. jstlfmt02b.jsp |
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%> <% response.setContentType("text/html;"); %> 파라메터:<c:out value="${param.id}"/> <form method="post"> <input type="text" name="id"> <input type="submit"> </form>
|
3. <fmt:bundle/>
properties 확장자를 사용하는 자원 파일을 읽어오는 역할을 하는 <fmt:bundle/> 에 대해서 알아보자. 형식은 다음과 같다.
Syntax <fmt:bundle basename="basename" [prefix="prefix"]> body content </fmt:bundle>
|
basename 속성에 지정된 properties 파일을 찾아서 locale 에 따라 읽어들인다.
properties 파일은 보통 WEB-INF/classes 아래에 위치하며 디렉토리의 깊이에 따라서 패키지형식의 이름을 취한다. TestBundle.properties 파일이 com/itexpert/chap9/msg 디렉토리에 있다면 basename="com.itexpert.chap9.msg.TestBundle" 이라고 지정하면 된다.
locale 이 ko 라면 TestBundle_ko.properties 파일을 읽어오게 되며, locale 이 맞지 않는 경우에는 TestBundle.properties 처럼 코드가 붙지 않은 파일을 읽어온다.
prefix 속성은 key 명칭이 공통적인 부분을 지정해서 body 에서 표현되는 key 를 단축시킨다. import 에서 패키지명을 지정하면 클래스명만 쓸 수 있는 것과 같이 생각할 수 있다.
properties 파일의 경우 j2sdk의 /bin/native2ascii.exe 를 이용해서 유니코드로 변환될 필요가 있다.
Eclipse를 사용할 경우 Eclipse에서 Properties 파일을 편집하기 위해 PropertiesEditor라는 플러그인을 사용한다. 설치 방법은 Help>Install New Software 선택 후 work with 에디터 창에 다음 주소를 입력한 후 설치하면 된다. http://propedit.sourceforge.jp/eclipse/updates/
4. <fmt:message/>
번들 태그에서 정한 값들을 가져오는 태그는 <fmt:message/>이다. 다음은 <fmt:message/> 태그의 형식이다.
Syntax 1: body 없는 경우 <fmt:message key="messageKey" [bundle="resourceBundle"] [var="varName"] [scope="{page|request|session|application}"]/>
Syntax 2: 메시지 파라메터를 지정하는 body가 있는 경우 <fmt:message key="messageKey" [bundle="resourceBundle"] [var="varName"] [scope="{page|request|session|application}"]> <fmt:param> 서브태그 </fmt:message>
Syntax 3: 키와 선택적 메시지 파라메터를 지정하는 body가 있는 경우 <fmt:message [bundle="resourceBundle"] [var="varName"] [scope="{page|request|session|application}"]> key 선택적 <fmt:param> 서브태그 </fmt:message>
|
번들에 있는 key 값을 불러온다. bundle 속성으로 번들을 직접 설정할 수도 있고, <fmt:bundle/> 태그 사이에 중첩되어서 키값만 받아서 출력할 수 있다.
예제 13. TestBundle.properties |
greeting=Hello. admin=sbjang |
예제 14. TestBundle_ko.properties |
greeting=안녕하세요. admin=장성봉 |
예제 15. jstlfmt03.jsp |
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%> <fmt:setLocale value="ko"/> <fmt:bundle basename="sample"> <fmt:message>error001</fmt:message><br> </fmt:bundle>
|
locale 을 "ko" 로 지정했기 때문에 TestBundle_ko.properties 파일을 읽어온다. "en"으로 정하거나 맞는 프로퍼티가 없을 경우는 기본프로퍼티인 TestBundle.properties 파일을 읽는다.
<fmt:message> 를 통해서 greeting 키와 admin 키를 읽어와서 표시한다.
5. <fmt:setBundle/>
페이지 전체에서 사용할 수 있는 번들을 지정할 수 있는데, 이에 대한 지정은 <fmt:setBundle/> 태그가 담당한다. var 속성에서 정한 변수를 이후에 나오는 <fmt:message/> 태그에서 basename 속성에 변수명으로 대체할 수 있다. <fmt:setBundle/> 의 형식은 다음과 같다.
Syntax <fmt:setBundle basename="basename" [var="varName"] [scope="{page|request|session|application}"]/> |
예제 15. jstlfmt03.jsp 는 다음과 같이 수정할 수 있다.
예제 16. jstlfmt04.jsp |
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%> <fmt:setLocale value="ko"/> <fmt:setBundle var="testBundle" basename="com.itexpert.chap9.msg.TestBundle"/>
<fmt:message bundle="${testBundle}" key="greeting"/><br> <fmt:message bundle="${testBundle}" key="admin"/><br> |
var 에서 변수를 설정할 때는 EL 을 사용하지 않는다. 다른 태그에서 이것을 불러오는 경우는 EL 을 사용해서 불러온다. testBundle 변수의 사용을 눈여겨 볼만하다.
6. <fmt:formatNumber/>
다음은 숫자 형식을 표현하는 <fmt:formatNumber/> 태그이고 형식은 다음과 같다.
Syntax 1: body 없는 경우 <fmt:formatNumber value="numericValue" [type="{number|currency|percent}"] [pattern="customPattern"] [currencyCode="currencyCode"] [currencySymbol="currencySymbol"] [groupingUsed="{true|false}"] [maxIntegerDigits="maxIntegerDigits"] [minIntegerDigits="minIntegerDigits"] [maxFractionDigits="maxFractionDigits"] [minFractionDigits="minFractionDigits"] [var="varName"] [scope="{page|request|session|application}"]/>
Syntax 2: 형식에 맞출 수치가 body에 있는 경우 <fmt:formatNumber [type="{number|currency|percent}"] [pattern="customPattern"] [currencyCode="currencyCode"] [currencySymbol="currencySymbol"] [groupingUsed="{true|false}"] [maxIntegerDigits="maxIntegerDigits"] [minIntegerDigits="minIntegerDigits"] [maxFractionDigits="maxFractionDigits"] [minFractionDigits="minFractionDigits"] [var="varName"] [scope="{page|request|session|application}"]> 형식화될 수치 </fmt:formatNumber>
|
각 속성을 정리한 표는 다음과 같다.
속성 |
동적값 |
Type |
설명 |
value |
true |
String 또는 Number |
형식화될 수치 |
type |
true |
String |
숫자, 통화, 퍼센트 중 어느 것으로 표시할 지 지정 {number|currency|percent} |
pattern |
true |
String |
사용자가 지정한 형식 패턴. |
currencyCode |
true |
String |
ISO 4217 통화 코드. 통화 형식일 때만 적용(type="currency") |
currencySymbol |
true |
String |
통화 기호. 통화 형식일 때만 적용 (type="currency") |
groupingUsed |
true |
boolean |
형식 출력에 그룹 분리기호를 포함할지 여부 |
maxIntegerDigits |
true |
int |
형식 출력에서 integer 최대 자리수 |
minIntegerDigits |
true |
int |
형식 출력에서 integer 최소 자리수 |
maxFractionDigits |
true |
int |
형식 출력에서 소수점 이하 최대 자리수. |
minFractionDigits |
true |
int |
형식 출력에서 소수점 이하 최소 자리수. |
var |
false |
String |
형식 출력 결과 문자열을 담는 scope에 해당하는 변수명 |
scope |
false |
String |
var 의 scope |
7. <fmt:parseNumber/>
반대로 정해진 패턴을 문자열에서 수치를 파싱해내는 태그는 <fmt:parseNumber/>이며 형식은 다음과 같다.
Syntax 1: body가 없는 경우 <fmt:parseNumber value="numericValue" [type="{number|currency|percent}"] [pattern="customPattern"] [parseLocale="parseLocale"] [integerOnly="{true|false}"] [var="varName"] [scope="{page|request|session|application}"]/>
Syntax 2: 파싱할 수치를 body 에 갖고 있는 경우 <fmt:parseNumber [type="{number|currency|percent}"] [pattern="customPattern"] [parseLocale="parseLocale"] [integerOnly="{true|false}"] [var="varName"] [scope="{page|request|session|application}"]> 파싱할 수치 </fmt:parseNumber>
|
각 속성을 정리한 도표는 다음과 같다.
속성 |
동적값 |
Type |
설명 |
value |
true |
String 또는 Number |
파싱할 수치 |
type |
true |
String |
숫자, 통화, 퍼센트 중 어느 것으로 표시할 지 지정 {number|currency|percent} |
pattern |
true |
String |
사용자가 지정한 형식 패턴. |
parseLocale |
true |
String 또는 java.util.Locale |
파싱 작업의 기본 형식 패턴(숫자, 통화, 퍼센트 각각)을 제공하는 Locale |
integerOnly |
true |
boolean |
주어진 값에서 integer 부분만 파싱할지 여부를 지정 |
var |
false |
String |
파싱 결과 (java.lang.Number 타입)를 담는 scope에 해당하는 변수명 |
scope |
false |
String |
var 의 scope |
8. <fmt:formatDate/>
다음은 날짜 형식을 표현하는 <fmt:formatDate/> 태그이고 형식은 다음과 같다.
Syntax <fmt:formatDate value="date" [type="{time|date|both}"] [dateStyle="{default|short|medium|long|full}"] [timeStyle="{default|short|medium|long|full}"] [pattern="customPattern"] [timeZone="timeZone"] [var="varName"] [scope="{page|request|session|application}"]/>
|
각 속성을 정리한 도표는 다음과 같다.
속성 |
동적값 |
Type |
설명 |
value |
true |
java.util.Date |
형식화될 Date 와 time |
type |
true |
String |
형식화할 데이터가 시간, 날짜, 모두 인지 셋 중 하나를 지정한다. |
dateStyle |
true |
String |
미리 정의된 날짜 형식. Java.text.DateFormat 클래스에 정의된 문법을 따른다. type="date", type="body", type속성이 생략된 경우 사용. |
timeStyle |
true |
String |
미리 정의된 날짜 형식. Java.text.DateFormat 클래스에 정의된 문법을 따른다. type="time", type="body" 의 경우 사용. |
pattern |
true |
String |
사용자 지정 형식 스타일 |
timeZone |
true |
String 또는 java.util.TimeZone |
형식화 시간에 나타날 타임존 |
var |
false |
String |
형식 출력 결과 문자열을 담는 scope에 해당하는 변수명 |
scope |
false |
String |
var 의 scope |
9. <fmt:parseDate/>
정해진 패턴의 문자열에서 날짜를 파싱해내는 태그는 <fmt:parseDate/>이며 형식은 다음과 같다.
Syntax 1: body 없는 경우 <fmt:parseDate value="dateString" [type="{time|date|both}"] [dateStyle="{default|short|medium|long|full}"] [timeStyle="{default|short|medium|long|full}"] [pattern="customPattern"] [timeZone="timeZone"] [parseLocale="parseLocale"] [var="varName"] [scope="{page|request|session|application}"]/>
Syntax 2: 파싱한 값이 body 에 있는 경우 <fmt:parseDate [type="{time|date|both}"] [dateStyle="{default|short|medium|long|full}"] [timeStyle="{default|short|medium|long|full}"] [pattern="customPattern"] [timeZone="timeZone"] [parseLocale="parseLocale"] [var="varName"] [scope="{page|request|session|application}"]> 파싱할 Date 와 time </fmt:parseDate>
|
각 속성을 정리한 도표는 다음과 같다.
속성 |
동적값 |
Type |
설명 |
value |
true |
java.util.Date |
파싱할 Date 와 time |
type |
true |
String |
파싱할 데이터가 시간, 날짜, 모두 인지 셋 중 하나를 지정한다. |
dateStyle |
true |
String |
미리 정의된 날짜 형식. Java.text.DateFormat 클래스에 정의된 문법을 따른다. type="date", type="body", type속성이 생략된 경우 사용. |
timeStyle |
true |
String |
미리 정의된 날짜 형식. Java.text.DateFormat 클래스에 정의된 문법을 따른다. type="time", type="body" 의 경우 사용. |
pattern |
true |
String |
사용자 지정 형식 스타일 |
timeZone |
true |
String 또는 java.util.TimeZone |
형식화 시간에 나타날 타임존 |
parseLocale |
true |
String 또는 java.util.Locale |
파싱하는 동안 적용될 미리 정의된 형식 스타일의 Locale |
var |
false |
String |
파싱 결과(java.util.Date)를 담는 scope에 해당하는 변수명 |
scope |
false |
String |
var 의 scope |
다음은 숫자, 날짜에 대한 태그 사용 예제이다.
예제 17. jstlfmt05.jsp |
<%@ page pageEncoding="MS949" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> <pre><fmt:setLocale value="ko_KR"/> number : <fmt:formatNumber value="9876543.61" type="number"/> currency: <fmt:formatNumber value="9876543.61" type="currency"/> percent : <fmt:formatNumber type="percent">9876543.61</fmt:formatNumber>
pattern=".000" :<fmt:formatNumber value="9876543.61" pattern=".000" /> pattern="#,#00.0#":<fmt:formatNumber value="9876543.612345" pattern="#,#00.0#"/>
<jsp:useBean id="now" class="java.util.Date"/> <c:out value="${now}"/> date: <fmt:formatDate value="${now}" type="date"/> time: <fmt:formatDate value="${now}" type="time"/> both: <fmt:formatDate value="${now}" type="both"/>
default:<fmt:formatDate value="${now}" type="both" dateStyle="default" timeStyle="default"/> short :<fmt:formatDate value="${now}" type="both" dateStyle="short" timeStyle="short" /> medium :<fmt:formatDate value="${now}" type="both" dateStyle="medium" timeStyle="medium" /> long :<fmt:formatDate value="${now}" type="both" dateStyle="long" timeStyle="long" /> full :<fmt:formatDate value="${now}" type="both" dateStyle="full" timeStyle="full" />
pattern="yyyy년MM월dd일 HH시mm분ss초" <fmt:formatDate value="${now}" type="both" pattern="yyyy년MM월dd일 HH시mm분ss초"/> </pre>
|
10. <fmt:setTimeZone/>, <fmt:timeZone/>
특정 스코프의 타임존을 설정하는 <fmt:setTimeZone/> 태그의 형식은 다음과 같다.
Syntax <fmt:setTimeZone value="timeZone" [var="varName"] [scope="{page|request|session|application}"]/> |
타임존을 부분 적용하는 <fmt:timeZone/> 태그는 다음과 같은 형식이다.
Syntax <fmt:timeZone value="timeZone"> body content </fmt:timeZone> |
타임존을 적용한 시간 표시 예제이다.
예제 18. jstlfmt06.jsp |
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%> <pre><fmt:setLocale value="ko_KR"/> <jsp:useBean id="now" class="java.util.Date"/>
default: <c:out value="${now}"/> Korea KST : <fmt:formatDate value="${now}" type="both" dateStyle="full" timeStyle="full"/> <fmt:timeZone value="GMT"> Swiss GMT : <fmt:formatDate value="${now}" type="both" dateStyle="full" timeStyle="full"/> </fmt:timeZone> <fmt:timeZone value="GMT-8"> NewYork GMT-8: <fmt:formatDate value="${now}" type="both" dateStyle="full" timeStyle="full"/> </fmt:timeZone> </pre>
|
'강의노트 > 웹' 카테고리의 다른 글
JSTL XML 태그 (0) | 2013.07.11 |
---|---|
JSTL SQL 태그 (0) | 2013.07.11 |
JSTL core (0) | 2013.07.10 |
JSTL_EL (0) | 2013.07.09 |
JSTL(JSP Standard Tag Library) (0) | 2013.07.09 |