'formatNumber'에 해당되는 글 2

  1. 2009.08.12 java.lang.NumberFormatException: For input string: ""
  2. 2009.05.06 JSTL - fmt

java.lang.NumberFormatException: For input string: ""

숫자를 출력할 때 이런 에러가 종종 발생한다.
근본적으로는 데이터베이스에 이런 데이터가 들어가지 못하게 해야 한다.
Integer.parseInt(""); //java.lang.NumberFormatException: For input string: ""
Integer.parseInt(" "); //java.lang.NumberFormatException: For input string: " "

JSTL 사용시 이런 값이 있는 경우
<%
	pageContext.setAttribute("num", null);
%>
<fmt:formatNumber value="${num}" /> //EMPTY
<c:out value="${num}" default="0"/> //0
{empty num ? 0 : num} //0
{num == null ? 0 : num} //0
{num == "" ? 0 : num} //EMPTY
<%
	pageContext.setAttribute("num", "");
%>
<fmt:formatNumber value="${num}" /> //EMPTY
<c:out value="${num}" default="0"/> //EMPTY
{empty num ? 0 : num} //0
{num == null ? 0 : num} //EMPTY
{num == "" ? 0 : num} //0
<%
	pageContext.setAttribute("num", " ");
%>
" "
<fmt:formatNumber value="${num}" /> //EXCEPTION
<c:out value="${num}" default="0"/> //EMPTY
{empty num ? 0 : num} //EMPTY
{num == null ? 0 : num} //EMPTY
{num == "" ? 0 : num} //EMPTY
<%
	pageContext.setAttribute("num", "not a number");
%>
<fmt:formatNumber value="${num}" /> //EXCEPTION
<c:out value="${num}" default="0"/> //not a number
${empty num ? 0 : num} //not a number
${num == null ? 0 : num} //not a number
${num == "" ? 0 : num} //not a number

숫자포맷을 사용한다면 다음과 같이 사용
<fmt:formatNumber value="${empty num ? 0 : num}" />

아니면 태그 라이브러리를 하나 만들어

- 2010-02-27 추가
레거시에서 데이터를 전달해주는데 EMPTY 문자열이 넘어와야 하는데 길이가 1인 경우도 있다.
<c:when test="${empty item.state}"> //" "인 경우 empty는 false를 반환한다.
<c:when test="${empty fn:trim(item.state)}"> //trim 처리를 한다.

JSTL - fmt

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

<c:set var="now" value="<%= new java.util.Date() %>"/>
<c:out value="${now}"/> //Wed May 06 00:37:07 KST 2009
<fmt:formatDate value="${now}" type="date"/> //2009. 5. 6 
<fmt:formatDate value="${now}" type="time"/> //오전 12:37:07 
<fmt:formatDate value="${now}" type="both"/> //2009. 5. 6 오전 12:37:07 

<jsp:useBean id="now" class="java.util.Date" />
${now} //Wed May 06 00:37:07 KST 2009
<fmt:formatDate var="hour" value="${now}" type="TIME" pattern="HH" />
${hour} //00
<fmt:formatNumber value="12345.6789" type="number"/> //12,345.679

<fmt:formatNumber value="12345.6789" type="number" pattern=",###.00000"/> //12,345.67890
<fmt:formatNumber value="12345.6789" type="number" pattern="#.00"/> //12345.68

<fmt:formatNumber value="12345.6789" type="currency" currencySymbol="₩"/> //₩12,346

<fmt:formatNumber value="12345.6789" type="percent"/> //1,234,568%

<fmt:formatNumber value="12345.6789" pattern=".0"/> //12345.7
<fmt:formatNumber value="12345" pattern=".0"/> //12345.0
<fmt:formatNumber value="12345.6789" pattern=".#"/> //12345.7
<fmt:requestEncoding value="euc-kr"/>


<fmt:formatNumber  value="12345" pattern=".#"/> //12345.0
<fmt:formatNumber  value="12345" pattern=".0"/> //12345.0

<fmt:formatNumber  value="12345.6789" type="number" pattern="#.#####"/> //12,345.6789
<fmt:formatNumber  value="12345.67890" type="number" pattern="#.#####"/> //12,345.6789
<fmt:formatNumber  value="12345.67890" type="number" pattern="#.00000"/> //12,345.67890