Recent Posts
Recent Comments
Link
06-30 12:53
Today
Total
관리 메뉴

삶 가운데 남긴 기록 AACII.TISTORY.COM

JSTL Formatting 본문

DEV&OPS/Java

JSTL Formatting

ALEPH.GEM 2022. 7. 20. 14:09

Properties 파일

웹 어플리케이션에서 다국어 지원을 위해 Properties 파일을 이용하는 경우가 많습니다.

net.aacii.bundle 패키지를 생성해서 msg_ko.properties와 msg_en.properties 파일을 생성합니다.

이 properties 파일들은 한글의 경우 이클립스에서 자동으로 유니코드로 변환해주는데,

이 properties 파일들을 우클릭 후 open with를 선택 후 텍스트에디터로 열게 되면 한글이 유니코드로 변환되어 있는 것을 확인할 수 있습니다.

만약 자동으로 유니코드로 변환이 되지 않는다면, 이클립스 플러그인 중에 Properties Editor를 설치하시면 됩니다.

이 플러그인 설치 방법은 여기에서 다루지 않겠습니다.

 

msg_ko.properties 을 아래처럼 작성합니다.

id=손님
greeting=안녕하세요
name={0}님 환영합니다.

msg_en.properties 을 아래처럼 작성합니다.

id=guest
greeting=hello
name=welcome {0}!

 

 

i18n 액션

제품이나 서비스를 특정 지역의 언어나 문화에 맞추는 작업에 관한 태그들입니다.

 

<fmt: setLocale>: Locale을 지정하는 태그입니다.

value: 언어코드_국가코드 형식으로 지정하며 국가코드는 생략이 가능합니다.

scope: locale이 적용되는 스코프(유효범위)를 지정합니다. (page, request, session, application)

 

<fmt:setBundle>: 리소스 번들을 로드하고 특정 범위에 변수를 지정합니다. 

basename: 리소스 번들 파일을 설정합니다. 파일 이름을 지정할 때는 언어코드와 확장자는 생략합니다.

var: 리소스 번들의 내용을 지정할 변수의 이름을 지정합니다.

scope: 변수의 스코프를 지정합니다.

 

<fmt:bundle>: 태그 몸체에 있는 값들의 리소스 번들을 지정합니다.

basename: 사용할 리소스 번들의 파일명을 지정합니다. 언어코드_국가코드와 확장자를 생략합니다.

prefix: 리소스 번들의 키값 앞에 사용할 prefix를 지정합니다.

 

<fmt:message>: 리소스 번들에 있는 값에 접근할 때 사용합니다. 다중 언어를 지원하는 웹 어플리케이션을 구성할 때 문자가 들어가는 부분에 이 태그를 지정합니다.

key: 리소스 번들 파일의 name을 지정합니다.

bundle: <fmt:setBundle>로 설정된 리소스 번들을 지정합니다.

var: 리소스 번들의 값을 지정할 변수를 지정합니다.

scope: 변수가 저장되는 영역을 지정합니다. 

 

<fmt:param>: 이 태그는 <fmt:message>태그에 동적으로 parameter를 지정할 때 사용합니다. 리소스 번들에서 name에 해당하는 값을 지정할 때 {0}, {1}기호를 사용할 수 있습니다. 이 기호 자리에는 <fmt:param>태그의 value 속성에 지정한 값으로 대체됩니다.

value: properties 파일의 {숫자} 부분에 대체될 값을 지정합니다.

 

<fmt: requestEncoding>: 폼(<form>)에서 사용하는 인코딩 타입을 지정합니다.

value: 인코딩에 사용할 문자코드를 지정합니다.

 

/jstl 폴더에 ex09.jsp 파일을 작성합니다.

<%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jstl/fmt" %>
<fmt:requestEncoding value="UTF-8" />
Parameter : ${param.name} <br>
<form action="ex9.jsp" method="post">
이름: <input type="text" name="name">
<input type="submit" value="전송">
</form>

브라우저에서 실행시켜서 이름에 한글 이름(홍길동)을 입력하고 전송하면 Parameter: 에 전송되어 표기 되는 것을 확인할 수 있습니다.

 

/jstl 폴더에 ex10.jsp 파일을 작성합니다.

<%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jstl/fmt" %>

<%-- <fmt:setLocale value="en" /> --%>

<fmt:bundle basename="net.aacii.bundle.msg">
	<fmt:message key="id" />
	<fmt:message key="greeting" />
</fmt:bundle>

테스트 후 주석을 풀고 다시 테스트하면 로케일에 따라 properties 파일의 내용이 적용되어 출력이 되는 것을 확인할 수 있습니다.

 

/jstl 폴더에 ex11.jsp 파일을 작성합니다.

<%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jstl/fmt" %>

<fmt:setBundle basename="net.aacii.bundle.msg" />

<fmt:message var="name" key="name">
	<fmt:param>Tom</fmt:param>
</fmt:message>

${name}

 

 

숫자, 날짜 액션

<fmt:formatNumber> : 숫자, 퍼센트, 통화(돈) 을 표시하기 위해 사용하는 태그입니다.

value : 숫자 값

type : number 숫자, currency 통화, percent 백분율 입니다. 기본값은 number입니다.

currencyCode : 통화 코드

currencySymbol : 통화 기호

groupingUsed : 숫자 단위를 콤마 처럼 구분자를 사용할 지 지정합니다. 기본값은 true 입니다.

maxIntegerDigits : 정수 최대 출력 자릿수를 지정합니다.

minIntegerDigits : 정수 최소 출력 자릿수를 지정합니다.

maxFractionDigits : 소수점 이하 최대 출력 자릿수를 지정합니다.

minFractionDigits : 소수점 이하 최소 출력 자릿수를 지정합니다.

var : 값이 저장될 변수 이름을 지정합니다.

scope : 변수가 사용될 스코프를 지정합니다.

 

<fmt:parseNumber> : 숫자를 파싱하거나 퍼센트 통화를 표시하기 위해 사용하는 태그입니다.

value : 파싱할 문자열을 지정합니다.

type : 파싱할 타입을 지정합니다. 기본 값은 number입니다.

pattern : 파싱할 때 사용할 패턴을 지정합니다.

parseLocale : 파싱할 때 사용할 로케일을 지정합니다.

integerOnly : 파싱 대상을 정수로만 지정할 지 결정합니다. 기본값은 false 입니다.

var : 파싱할 결과를 저장할 변수입니다.

scope : 변수가 사용될 스코프를 지정합니다.

 

<fmt: formatDate> : 날짜/시간 포멧을 지정하는 태그입니다.

value : 날짜/시간 값

type : 데이터 타입을 지정합니다. time, date, both 중에 지정할 수 있고 기본값은 date 입니다.

dateStyle : 미리 지정된 날짜 형식을 지정합니다. (default, short, medium, long, full)

timeStyle : 미리 지정된 시간 형식을 지정합니다. (default, short, medium, long, full)

pattern : 시간과 날짜 형식을 지정합니다.

timeZone : 시간대를 지정합니다.

var : 값이 저장될 변수를 지정합니다.

scope : 변수의 스코프를 지정합니다.

 

<fmt: parseDate> : 다양한 날짜를 표기하기 위한 태그입니다. 속성들은 <fmt:formatDate>와 동일합니다.

 

/jstl 폴더에 ex12.jsp 파일을 작성합니다.

<%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

<c:set var="balance" value="123456.789" /><br>
<fmt:formatNumber type="currency" value="${balance}" />
<fmt:formatNumber type="number" maxIntegerDigits="3" value="${balance}" /><br>
<fmt:formatNumber type="number" maxFractionDigits="3" value="${balance}" /><br>
<fmt:formatNumber type="number" groupingUsed="false" value="${balance}" /><br>
<fmt:formatNumber type="percent" maxIntegerDigits="3" value="${balance}" /><br>
<fmt:formatNumber type="percent" maxFractionDigits="10" value="${balance}" /><br>
<fmt:formatNumber type="percent" minIntegerDigits="3" value="${balance}" /><br>
<fmt:formatNumber type="number" pattern="###.###E0" value="${balance}" /><br>
<br>
<fmt:setLocale value="en_Us" />
<fmt:formatNumber value="${balance}" type="currency" /><br>
<br>
<fmt:parseNumber value="1,234.56" pattern="0,000.000" var="num1" />
<fmt:parseNumber value="123" var="num2" />

${num1+num2}

 

/jstl 폴더에 ex13.jsp 를 작성합니다.

<%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

<c:set var="now" value="<%=new java.util.Date() %>" /><br>
<fmt:formatDate type="time" value="${now}" /><br>
<fmt:formatDate type="date" value="${now}" /><br>
<fmt:formatDate type="both" value="${now}" /><br>
<fmt:formatDate type="both" dateStyle="short" timeStyle="short" value="${now}" /><br>

<fmt:formatDate type="both" dateStyle="medium" timeStyle="medium" value="${now}" /><br>
<fmt:formatDate type="both" dateStyle="long" timeStyle="long" value="${now}" /><br>
<fmt:formatDate pattern="yyyy-MM-dd" value="${now}" /><br>

<fmt:parseDate value="2022-07-20 09:09:23" pattern="yyyy-MM-dd HH:mm:ss" var="date" />
<p>${date}</p>

언어코드와 국가 코드 참조 사이트

http://www.loc.gov/standards/iso639-2/php/English_list.php

 

Alpha-3 codes arranged alphabetically by English name of Language - Codes for the representation of names of languages (Library

 

www.loc.gov

https://ko.wikipedia.org/wiki/ISO_3166-1

 

ISO 3166-1 - 위키백과, 우리 모두의 백과사전

 

ko.wikipedia.org

 

/jstl 폴더에 ex14.jsp 파일을 작성합니다.

<%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

<c:set var="now" value="<%=new java.util.Date() %>" /><br>
대한민국:<fmt:formatDate value="${now}" type="both" dateStyle="full" timeStyle="full" /><br>
<fmt:timeZone value="en_us">
미국:<fmt:formatDate value="${now}" type="both" dateStyle="full" timeStyle="full" /><br>
</fmt:timeZone><br>
<hr>
대한민국:
<fmt:setLocale value="ko_kr" />
<c:set var="date" value="<%=new java.util.Date() %>" />
금액:<fmt:formatNumber value="100000" type="currency" /><br>
일시:<fmt:formatDate value="${date}" type="both" dateStyle="full" timeStyel="full" /><br>
미국:
<fmt:setLocale value="en_us" />
금액:<fmt:formatNumber value="100000" type="currency" /><br>
일시:<fmt:formatDate value="${date}" type="both" dateStyle="full" timeStyel="full" /><br>

 

 

 

 

 

 

728x90

'DEV&OPS > Java' 카테고리의 다른 글

MVC 패턴  (0) 2022.07.21
JSTL SQL  (0) 2022.07.20
JSTL Core  (0) 2022.07.08
태그 기반 커스텀 태그  (0) 2022.07.06
클래스 기반 커스텀 태그 JSP 2.1  (0) 2022.07.06