다국어 문서를 처리할 때 유용하고, 날짜와 숫자 형식을 다루는 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="yyyyMMdd HHmmss"

         <fmt:formatDate value="${now}" type="both"

            pattern="yyyyMMdd HHmmss"/>

</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