jsp로 화면을 그리고 있는데, 금액을 표시해야 되서 세자리마다 쉼표(, comma)를 넣어주고 싶었다. 1,000,000원 이렇게!
그래서 tld로 만들까.. script로 만들까.. 고민하다가, 찾아보니 jstl에서 기능을 제공하고 있었다.
다음에 다시 사용하기 위해 공유!
참고한 사이트는 아래 tutorials 홈페이지이다.
https://www.tutorialspoint.com/jsp/jstl_format_formatnumber_tag.htm
그리고 jstl document 관련 문서는 아래 url인 것 같다.
https://docs.oracle.com/javaee/5/jstl/1.1/docs/tlddocs/
우리는 숫자를 금액으로 표시하는 방법에 대해 알고 싶으니까 oracle 문서에서 formatNumber를 누르고 들어가면 설명이 나온다.
번역하면 아래와 같다.
JSTL fmt
Tag formatNumber
숫자값을 숫자, 통화, 퍼센트로 바꾼다.
Tag Information | |
Tag Class | org.apache.taglibs.standard.tag.rt.fmt.FormatNumberTag |
TagExtraInfo Class | None |
Body Content | JSP |
Display Name | None |
Attributes | ||||
Name | Required | Request-time | Type | Description |
value | false | true | java.lang.String | 변환할 숫자값 |
type | false | true | java.lang.String | 변환할 타입(숫자(number), 통화(currency), 퍼센트(percentage) |
pattern | false | true | java.lang.String | 사용자 지정 포맷 패턴 |
currencyCode | false | true | java.lang.String | type="currency" 일 때, 적용. 나머지 타입에서는 해당 값 무시. |
currencySymbol | false | true | java.lang.String | type="currency" 일 때, 적용. 나머지 타입에서는 해당 값 무시. |
groupingUsed | false | true | java.lang.String | Specifies whether the formatted output will contain any grouping separators. |
maxIntegerDigits | false | true | java.lang.String | Maximum number of digits in the integer portion of the formatted output. |
minIntegerDigits | false | true | java.lang.String | Minimum number of digits in the integer portion of the formatted output. |
maxFractionDigits | false | true | java.lang.String | Maximum number of digits in the fractional portion of the formatted output. |
minFractionDigits | false | true | java.lang.String | Minimum number of digits in the fractional portion of the formatted output. |
var | false | false | java.lang.String | 포맷팅 된 결과를 String 값으로 저장할 scoped 변수. |
scope | false | false | java.lang.String | var의 범위 |
이제 실전! 사용해보자.
jstl에 fmt 안에 있는 기능이기 때문에 jsp 상단에 아래 코드 추가.
<%@ taglib prefix = "fmt" uri = "http://java.sun.com/jsp/jstl/fmt" %>
숫자를 최대 3자리마다 쉼표를 찍기 위해 아래와 같이 쓰면 된다.
<fmt:formatNumber type="number" maxFractionDigits="3" value="${price}" />
<fmt:formatNumber type="number" maxFractionDigits="3" value="${price}" var="commaPrice" />
불러다가 쓸때는 ${commaPrice} 이런식을 el 사용해서 하면 된다.
<%@ 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" %> <html> <body> <div> <c:set var="price" value="123456.789"/> <h4>price : ${price }</h4> <ol> <li>3자리 마다 쉼표 : <fmt:formatNumber type="number" maxFractionDigits="3" value="${price}" /></li> <li>3자리 마다 쉼표 변수지정 : <fmt:formatNumber type="number" maxFractionDigits="3" value="${price}" var="commaPrice"/> ${commaPrice} </li> <li>보여줄 최대 자릿수: <fmt:formatNumber type="number" maxIntegerDigits="3" value="${price}"/></li> <li>USA 통화 : <fmt:setLocale value="en_US"/><fmt:formatNumber type="currency" value="${price}" /></li> <li>한국 통화 : <fmt:setLocale value="ko_KR"/><fmt:formatNumber type="currency" value="${price}" /></li> <li>영국 통화 : <fmt:formatNumber type="currency" currencyCode="GBP" value="${price}" /> </li> <li>@ 통화 : <fmt:formatNumber type="currency" currencySymbol="@" value="${price}" /> </li> <li>퍼센트 : <fmt:formatNumber type="percent" minIntegerDigits = "10" value = "${price}" /></li> <li>퍼센트 : <fmt:formatNumber type="percent" maxIntegerDigits = "10" value = "${price}" /></li> </ol> </div> </body> </html>
결과는
통화 지정할 때, setLocale에 나라를 어떻게 써야할지 몰랐는데, 이클립스에서 해당 내용에 마우스 오버하니까 설명이 나왔다.
설명보고 찾아서 나라 입력!
ISO-639에서 정의된 언어 코드 2자리 소문자로, ISO-3166에서 정의한 나라 코드 2자리 대문자로 하이픈(-) 혹은 언더바(_)로 연결해서 쓰면 된다.
currency에 currencyCode는 무슨 코드 쓰면 좋은지 document에 나와있다! (ISO 4217)
'개발~ > JSP' 카테고리의 다른 글
RequestDispatcher에 foward와 response.sendRedirect url차이 (0) | 2018.04.18 |
---|---|
[JSP] MVC 패턴 구현 - URI 패턴 (0) | 2017.03.08 |
[JSP] MVC 패턴 구현 - 커맨드 패턴, 설정 파일 (0) | 2017.03.08 |
[JSP]DBCPInit2.java (0) | 2017.03.08 |
[JSP] 커넥션 풀 (0) | 2017.03.07 |