출처 : http://egloos.zum.com/v3brs/v/1303179
데이타베이스등에서 취득한 수치 데이터를 출력할 때에, 인간이 보기 쉬운 형태에 가공하는 것은 중요합니다.자리수 단락의 콤마를 부가하고 싶은, 소수점 이하의 자리수를 갖추고 싶은, 음수의 경우에는 선두에 「▲」을 붙이고 싶은 등, 데이터를 이용하는 문맥 나름으로 요구는 다양하다는 두입니다.
이것들은, 대체로 경시되기 십상인 포인트일지도 모릅니다만, 어플리케이션의 최종적인 성과물인 데이터가 얼마나 보기 쉽고, 오해가 없는 것처럼 보일까는, 극단적인 이야기, 최종 사용자에 있어서는 그 어플리케이션을 평가하는 「모든 것」이라도 있습니다.
단지, 사소한 일이라고 해도, 수치 데이터의 가공은 결코 단순한 조작이 아닙니다.첫머리에서 말한 것처럼, 수치의 표기에는 다양한 패턴이 있고, 또, 나라/지역에 의해도 표기가 다른 케이스가 있습니다(예를 들면, 통화 기호 등).Java 기본API 에는, 이러한 수치의 정형을 간단하게 실시하기 위한java.text.DecimalFormat 클래스가 준비되어 있습니다만, 수치를 정형할 만한 위해(때문에), 하나 하나JSP 페이지에 스크립트 렛을 기술해야 하는 것은, 너무 바람직한 일이 아닙니다(가독성이나 보수성을 고려했을 경우,JSP 페이지에서는 가능한 한 스크립팅 요소를 이용해야 하는 것이 아닙니다).
그러나,JSTL (JSP Standard TagLibrary )의i18n 태그 라이브러리를 이용하는 것으로, 이러한 정형적인 수치 가공의 논리를 스크리프트레스로 지정할 수 있습니다.이하에,i18n 태그 라이브러리를 사용한 간단한 예를 봅시다.
formatNumber.jsp |
<%@ page contentType="text/html;charset=euc-kr" %> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> <fmt:formatNumber value="17005" type="CURRENCY" groupingUsed="true" /> |
<fmt:formatNumber> 요소는,value 속성으로 지정된 값을, 그 외의 속성으로 지정된 양식에 따라서 가공해, 결과를 출력합니다(주) .위의 예의 경우,type 속성이CURRENCY (통화)이므로 통화 기호를 수치의 선두에,groupingUsed 속성이true 그래서1000 의 단위에 자리수 단락 기호를, 각각 부여합니다.즉, 위의 용례는 결과적으로 이하와 같은 출력을 생성합니다.
주:가공의 대상이 되는 값은,value 속성 대신에,<fmt:formatNumber> 요소 부하의 텍스트(본체)로서 지정하는 것도 가능합니다.고정치, 또는 식 언어(Expression Language )(으)로 표현할 수 있는 값은value 속성으로, 다른 태그 라이브러리에 의한 출력 결과를 이용하고 싶은 경우에는, 부하의 텍스트로서 지정하는 것이 통례입니다.덧붙여 가공 결과는 그대로 출력하는 것이 아니라,var 속성을 지정하는 것으로 지정된 변수에 격납하는 것도 가능합니다(scope 속성으로 스코프의 지정도 가능).
그 외에도,<fmt:formatNumber> 요소에는 다양한 속성이 준비되어 있습니다.이하에 주요한 속성을 모아 두기로 합시다.
<fmt:formatNumber> 요소의 주된 속성속성 | 개요 |
type | 데이터형(NUMBER |CURRENCY |PERCENT ) |
currencyCode | 통화 코드(JPY |USD 등) |
currencySymbol | 통화 기호( ,$ 등) |
groupingUsed | 자리수 단락 기호를 사용할까(true |false ) |
maxIntegerDigits | 정수 부분의 최대 자리수 |
minIntegerDigits | 정수 부분의 최소 자리수 |
maxFractionDigits | 소수 부분의 최대 자리수 |
minFractionDigits | 소수 부분의 최소 자리수 |
max /minIntegerDigits (이)나max /minFractionDigits 속성을 지정했을 경우에는, 수치의 출력 자리수를 갖출 수 있습니다.max ~속성의 지정치를 출력 자리수가 넘었을 경우에는 자동적으로 잘라서 버림을 하고,min ~속성의 지정치에 출력 자리수가 못 미친 경우에는,0 하지만 보완됩니다.
<fmt:formatNumber value="234.5678" groupingUsed="true" maxIntegerDigits="4" maxFractionDigits="2" minIntegerDigits="4" minFractionDigits="2" /> |
즉, 상기의 예에서는, 이하와 같은 결과가 됩니다.
currencyCode ,currencySymbol 속성은,type 속성이CURRENCY (통화)의 경우에게만 유효합니다.통상, 통화 기호는 현재의 로케일(지역) 정보에 따라서 정해집니다만(주) , 개개의 출력 단위로 지정하고 싶다고 하는 경우에는, 이러한 속성으로 설정할 필요가 있습니다.
<fmt:formatNumber value="170" type="CURRENCY" currencySymbol=" £" /> |
즉, 상기의 예에서는, 이하와 같은 결과가 됩니다
주:로케일 정보는, 디폴트로 서버·디폴트의 지역 설정에 따릅니다만, 어플리케이션 단위, 페이지 단위로, 각각 지정할 수도 있습니다.로케일 설정의 상세한 것에 대하여는, 「 다국어를 지원하는 사이트 구축(JSTL편) 」(을)를 참조. 이상과 같은 속성을 이용하는 것으로 대개의 표기는 실현될 수 있습니다만, 때로는, 보다 복잡한 서식을 지정하고 싶다고 하는 케이스가 있을지도 모릅니다.그러한 경우에는,pattern 속성으로 커스텀의 서식 문자열을 지정하는 것도 가능합니다.예를 들면, 이하는, 주어진 수치가 정수일까 음수일까에 의해서, 다른 서식을 지정합니다.
<fmt:formatNumber value="234.3" pattern="△#,##0.00; ▼#,##0.00" /><br/> <fmt:formatNumber value="-1234.56" pattern="△#,##0.00; ▼#,##0.00" /> |
상기의 예는, 이하와 같은 결과가 됩니다.
이것들은, 그저 일례입니다만,pattern 속성에서는 이하와 같은 서식 기술자를 조합하는 것으로, 다양한 패턴을 표현할 수 있습니다.마지막으로,pattern 속성으로 이용 가능한 패턴 기술아이를 두기로 하겠습니다.
pattern 속성으로 이용 가능한 서식 기술자서식 기술자 | 개요 |
0 | 수치(제로에서도 표시) |
# | 수치(제로는 표시하지 않는다) |
- | 마이너스 기호 |
, | 그룹 단락 |
; | 정부 서브 패턴의 단락 |
% | 퍼센트(1/100 ) |
u2030 | 파? 르(1/1000 ) |
E | 과학 표기법 |
JSTL을 사용한 날짜 데이터 가공
「
JSTL을 사용한 수치 데이터 가공 」에서는,JSTL 의i18n 태그 라이브러리를 이용하는 것으로 수치 데이터를 다양한 패턴에 정형하는 방법에 대해 소개했습니다.본TIPS 그럼, 같은i18n 태그 라이브러리를 이용하고, 일자 데이터를 가공하는 방법에 대해 소개하기로 합시다.
일자 데이터에는, 수치 데이터 이상으로 표기의 패턴(일본이 달력/서기,YYYY 년MM 월DD 일,YYYY/MM/DD ,YY-MM-DD 등)이 존재하고, 나라/지역에 의해도 표기 룰이 다른 경우가 있습니다.Java 기본API 에는, 이러한 일자의 정형을 행하기 위한 전용의java.text.SimpleDateFormat 클래스가 준비되어 있습니다만, 일자를 정형할 만한 유익의 정형적인 조작에, 하나 하나 스크립트 렛을 기술해야 하는 것은 귀찮습니다.그러나,<fmt:formatDate> 요소를 이용하는 것으로, 필요한 파라미터를 속성치로서 지정하는 것만으로 스크리프트레스에 일자 가공을 실현할 수 있습니다.이하에,<fmt:formatDate> 요소를 이용한 간단한 용례를 보기로 합시다.
formatDate.jsp |
<%@ page contentType="text/html;charset=euc-kr" %> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> <jsp:useBean id="today" class="java.util.Date" /> <fmt:formatDate value="${today}" type="DATE" dateStyle="FULL" /> |
<fmt:formatDate> 요소는,value 속성으로 지정된 값을, 그 외 속성으로 지정된 양식에 따라서 가공해, 결과를 출력합니다(주) .위의 예의 경우,type 속성이DATE (일자)이므로 일자 부분만을,dateStyle 속성이FULL 그래서 제일 긴 형식에서, 출력합니다.즉, 위의 용례는 결과적으로 이하와 같은 출력을 생성합니다.
주:가공의 대상이 되는 일자는,value 속성 대신에,<fmt:formatDate> 요소 부하의 텍스트(본체)로서 지정하는 것도 가능합니다.고정치, 또는 식 언어(Expression Language )(으)로 표현할 수 있는 값은value 속성으로, 다른 태그 라이브러리에 의한 출력 결과를 이용하고 싶은 경우에는, 부하의 텍스트로서 지정하는 것이 통례입니다.덧붙여 가공 결과는 그대로 출력하는 것이 아니라,var 속성을 지정하는 것으로 지정된 변수에 격납하는 것도 가능합니다(scope 속성으로 스코프의 지정도 가능). 그 외에도,<fmt:formatDate> 요소에는 다양한 속성이 준비되어 있습니다.이하에 주요한 속성을 모아 두기로 합시다.
<fmt:formatNumber> 요소의 주된 속성속성 | 개요 |
type | 데이터형(DATE |TIME |BOTH ) |
dateStyle | 일자 스타일(FULL |LONG |MEDIUM |SHORT |DEFAULT ) |
timeStyle | 시각 스타일(FULL |LONG |MEDIUM |SHORT |DEFAULT ) |
timeZone | 타임 존(JST 등.디폴트는 시스템·디폴트) |
type 속성에 의해서, 표시 대상을 일자만, 시각만, 일자·시각 쌍방의 어느쪽이든으로부터 선택할 수 있습니다.dateStyle ,timeStyle 속성은, 일자·시각 부분 각각 붙고, 어떠한 스타일 형식에서 표시하는지를 선택합니다.일반적으로는, 이것들 속성의 지정만으로도 대부분의 용도를 조달할 수 있을 것입니다만, 때로는, 보다 복잡한 서식을 지정하고 싶다고 하는 케이스가 있을지도 모릅니다.그러한 경우에는,pattern 속성으로 커스텀의 서식 문자열을 지정하는 것도 가능합니다.예를 들면, 이하와 같은 사용법을 합니다.
<fmt:formatDate value="${today}" type="DATE" pattern="yyyy년MM월dd일(E) KK시mm분ss초" /> |
이 서식 문자열의 결과는 이하대로입니다.
2006년06월28일(수) 오후 01시58분26초 |
상기는 그저 일례입니다만,pattern 속성에서는 이하와 같은 서식 기술자를 조합하는 것으로, 다양한 패턴을 표현할 수 있습니다.마지막으로,pattern 속성으로 이용 가능한 패턴 기술아이를 두기로 하겠습니다.
pattern 속성으로 이용 가능한 서식 기술자서식 기술자 | 개요 | 가공예 |
G | 기원 | AD |
y | 년 | 2004;04 |
M | 월 | Septenber; Sep; 09 |
d | 달에 있어서의 날 | 12 |
E | 요일 | Friday; Fri |
w | 해에 있어서의 주 | 10 |
W | 달에 있어서의 주 | 1 |
D | 해에 있어서의 날 | 270 |
F | 달에 있어서의 요일 | 6 |
a | 오전/오후 | AM |
H | 때(0 ~23 ) | 11 |
k | 때(1 ~24 ) | 11 |
K | 때(0 ~11 ) | 3 |
h | 때(1 ~12 ) | 12 |
m | 분 | 59 |
s | 초 | 37 |
S | ? 리초 | 420 |
z | 타임 존 | Pacific Standard Time; PST; GMT-08:00 |
Z | 타임 존 | -800
|