티스토리 뷰

 [jsp10강] JSTL FORMATTING 태그 사용법 


이번글에서는 JSTL 태그중 간간히 쓰이는 formatting 태그에 대해서 알아보겠습니다.

formatting 태그는 쉽개 생각하시면 됩니다.

데이터 타입들을 자신이 원하는 종류로 변경할수 있다고 생각하시면됩니다..

즉 형변환으로 많이 사용한다고 보면 됩니다.

설명에 들어가기전 JSTL 무엇인지 모르거나.. 태그의종류 및 라이브러리 설정법이 모르시면..

아래링크를 참조해주세요!


 이전 글 링크 


그럼이제 JSTL FORMATTING 태그들의 사용법을 예제를통해서 하나하나씩 알아보겠습니다.

(관련있는 태그들을 묶어서 설명하였습니다.)


 1. setLocale, requestEncoding (로케일 지정)

1.  <fmt :setLocale>, <fmt:reqestEncoding> 태그


reqestEncoding 태그는 reqest 파라미터의 인코딩설정을 하는 태그이다.

( <% request.setCharacterEncoding("");%> 태그와 동일하다..)


setLocale 태그는 지역을 설정하는 태그이다.

하지만 스프링을 사용한다면.. 다국어를 지원하기에.. 별로 쓸일이 없다..


문법은 요렇게 쓰시면 됩니다.

 사용 문법 

<fmt:requestEncoding [value="charsetName"]/> 


<fmt:setLocale value="locale" [variant="variant"] [scope="{page|request|session|application}"]/>


charsetName : 인코딩 타입을 넣어주시면 됩니다.

variant : 브라우저스팩

scope : 적용 범위

예제 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
 
<%@page import="java.util.List"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.Map"%>
<%@page import="java.util.HashMap"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jstl/fmt" prefix="fmt"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <!-- request 인코딩 설정 -->
    <fmt:requestEncoding value="UTF-8"/>
    <div>
        requestEncoding : <%= request.getCharacterEncoding() %> 
    </div>
    
    <!-- 지역확인 및 적용 -->
    <div>
        default locale : <%= response.getLocale() %> 
    </div>
    <div>
        set locale : ko <fmt:setLocale value="ko" /> now: <%= response.getLocale() %>
    </div>
    <div
         set locale : ja <fmt:setLocale value="ja" /> now: <%= response.getLocale() %> 
    </div>
     <div>
         set locale : en <fmt:setLocale value="en" /> now: <%= response.getLocale() %> 
     </div>
    
</body>
</html>
cs

실행결과 및 설명 


<fmt:requestEncoding value="UTF-8"/>

request 인코딩을 utf-8 로 적용해보았고.. 출력해보았다.

그결과 적용이 된걸 확인할수 있고..


<fmt:setLocale value="ko" />

setLocale 을 사용하여 locale 을 변경하여 출력해보았다..

바뀐것을 확인할수있다.



 2. bundle, massage, setBundle (메시지 처리)


2-1. <fmt:bundle>, <fmt:massage>, <fmt:setBundle> 태그


다국어를 처리할때 사용하는 태그이다..

fmt:setLocale 나라를 변경한후.. 그나라에 맞는 메시지를 갖어와서 쓸수있다.

문법은 다음과 같고.. 응용해서 쓸수 있는 문법이 많아.. 예제를 살펴보면 쉽게 이해할수 있습니다.

사용 문법 

<fmt:bundle basename="properties 파일 위치"></fmt:bundle>

<fmt:message key="properties 파일 안에 적어놓은 키명">

<fmt:setBundle var="변수명" basename="properties 파일 위치" />

예제 

이번예제에는 파일이 총 4개가 필요합니다.

(properties 파일을 만드는법은.. 이클립스로 만든다면.. 

오른쪽마우스 -> new -> Greneral -> Untitled Tesxt File -> 저장하실때 .properties 붙여서 저장하면 됩니다!)


1. jstl_ko.properties 파일

1
localeMessage=koMessage.
cs


2.jstl_en.properties
1
localeMessage=jaMessage.
cs

3.jstl_en.properties
1
localeMessage=enMessage.
cs

4. jsp 파일

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
 
<%@page import="java.util.List"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.Map"%>
<%@page import="java.util.HashMap"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jstl/fmt" prefix="fmt"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
 
    <!-- 첫번째 문법 -->
    <!-- 한국어 -->
    <div>
        <fmt:setLocale value="ko" />
        <fmt:bundle basename="com.gukv.blog.jstl.jstl" >
            <fmt:message>localeMessage</fmt:message>
        </fmt:bundle>
    </div>
    <!-- 일본어 -->
    <div>
        <fmt:setLocale value="ja" />
        <fmt:bundle basename="com.gukv.blog.jstl.jstl" >
            <fmt:message>localeMessage</fmt:message>
        </fmt:bundle>
    </div>
    <!-- 영어 -->
    <div>
        <fmt:setLocale value="en" />
        <fmt:bundle basename="com.gukv.blog.jstl.jstl" >
            <fmt:message>localeMessage</fmt:message>
        </fmt:bundle>
    </div>
    
    <!-- 두번째 문법 -->
    <div>
        <fmt:setLocale value="ko" />
        <fmt:setBundle basename="com.gukv.blog.jstl.jstl"/>
        <fmt:message key="localeMessage" />
    </div>
    
    <div>
        <fmt:setLocale value="ja" />
        <fmt:setBundle basename="com.gukv.blog.jstl.jstl"/>
        <fmt:message key="localeMessage" />
    </div>
    <div>
        <fmt:setLocale value="en" />
        <fmt:setBundle basename="com.gukv.blog.jstl.jstl"/>
        <fmt:message key="localeMessage" />
    </div>
    
</body>
</html>
cs

실행결과 및 설명 


우선 패키지를 하나 편한대로 만들어줍니다.

그패키지 안에 다국어를 지원할 properties 파일을 만들어줍니다.

저는 3개국어를 지원한다고 생각하고 한글, 일본어, 영어 이렇게 3개의 파일을 만들었습니다.

properties 파일을 만들때는 규칙이 있습니다. 

만약 파일명이 tstl.properties 파일을 만들어주고 한국어를 적어 놓으실꺼면 "_ko" 를 붙여서 만들어 주셔야합니다.

tstl_ko.properties 요렇게 만들면 한국어가 들어가는 properties 를 만든것이고..

tstl_en.properties 요렇게 만들면 영어가 들어가는 properties 를 만든것입니다..

("_" 다음에 국가코드를 붙이면 됩니다...)

이렇게해서 다국어 파일만들기가 끝나면 이제 번들과 메시지 태그로 사용하시면됩니다.

첫번째 사용 문법을 보면..
<div>
        <fmt:setLocale value="ko" />
        <fmt:bundle basename="com.gukv.blog.jstl.jstl" >
            <fmt:message>localeMessage</fmt:message>
        </fmt:bundle>
    </div>

요렇게 bundle 안에서 message 를 지정하여 뿌려주었습니다.
basename 은 properties 파일 위치입니다.
즉 제가 작성한것을 토대로 위치를 확인해본다면..
com.gukv.blog.jstl 패키지 안에 jstl 파일을 지목해준것입니다.
그다음 언어에따라 알아서 찾아갑니다.
<fmt:setLocale value="ko" />
언어를 ko 로 설정했기때문에.. 즉.. "jstl_ko.properties" 파일을 읽어 메시지로 사용을 할수 있는것입니다.

이제 두번째 문법을 살펴보도록 하겠습니다.
<div>
        <fmt:setLocale value="ko" />
        <fmt:setBundle basename="com.gukv.blog.jstl.jstl"/>
        <fmt:message key="localeMessage" />
    </div>

이번에는 setBundle 을 사용하여 번들을 페이지에 지정을 해주었습니다.

<fmt:setBundle basename="com.gukv.blog.jstl.jstl"/>

번들이 지정이 되었기때문에 메시지에 key 값만 넣어주면 값이 나오게 됩니다..
key값은.. 


localeMessage=koMessage.

요렇게 입력된 jstl_ko.properties 파일이 있다면...
"localeMessage" 가 key 가 되는것 입니다!




 3. formatNumber, formatDate, parseDate, parseNumber, setTimeZone, timeZone (숫자, 날짜 포맷팅)


3. <fmt:formatNumber>, <fmt:formatDate>, <fmt:parseDate>, <fmt:parseNumber>, <fmt:setTimeZone>, <fmt:timeZone> 태그


쉽게 생각해서 포멧형태를 맞춰주거나 형변환을하여 사용하는 태그라고 생각하시면됩니다.

간간히 사용을하기때문에 필요하실때 사용하면 좋은 태그입니다.


사용 문법 

1. formatNumber


숫자 형식을 표현하는 태그입니다. (쉼표를 찍어준다던지.. 소숫점 어디까지 표시한다던지.. 등등)


<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}"]/> 


2. formatDate


날짜 형식을 표현하는 태그입니다. (숫자로만 표현한다던지.. 글자가 포함된 형식으로 출력한다던지..)


<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}"]/> 


3. parseDate


formatDate 의 반대계념이다. 형식이 되어있을때 날짜만 추출하는것 이다. 


<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}"]/> 


4. parseNumber


formatNumber 의 반대의 개념이다. 정해진 형태에서 숫자만 추출을 하는것.


<fmt:parseNumber value="numericValue"    [type="{number|currency|percent}"] [pattern="customPattern"]  [parseLocale="parseLocale"]

  [integerOnly="{true|false}"]  [var="varName"]  [scope="{page|request|session|application}"]/> 


5. setTimeZone


특정 스코프의 타임 존을 설정하거나 부분을 적용한다.


<fmt:setTimeZone value="timeZone"   [var="varName"]  [scope="{page|request|session|application}"]/>


6. timeZone


특정 스코프의 타임 존을 설정하거나 부분을 적용한다.


<fmt:timeZone value="timeZone"> </fmt:timeZone>



 글을 마치며..


jstl 에서 종종쓰이는 쓰이는 formatting 에 대해서 알아보았습니다.

데이터의 형변환으로 많이 사용하니 알아두시길 바랍니다.


 정리 

 1. jstl formatting 태그는 형변환을 위해 은근 사용한다.

2. jstl formatting 태그는 하지만 대체되는 곳이 많아 많이는 사용하지 않는다.. 

(상위에서 미리 형변환을 해서 넘겨주거나.. 스크립트 함수로 일괄적으로 변경할수이도 있기에..가끔 사용됨)


이상으로 JSTL FORMATTING 태그 사용법에 대해서 알아보았습니다.

수고하세요!


도움이 되셨다면 로그인 없이 가능한

아래 하트♥공감 버튼을 꾹 눌러주세요! 


댓글