설 지나고 첫 글이네요
흔하게 볼 수 있는 JSTL 오류 정리해 봅니다.

에러메시지
심각: Servlet.service() for servlet [action] in context with path [] threw exception [javax.servlet.ServletException: javax.servlet.jsp.JspException: In <formatNumber>, value attribute can not be parsed into java.lang.Number: "-"] with root cause
파일: 경로 []의 컨텍스트에서 서블릿 [action]에 대한 서블릿.service()가 예외 [javax.servlet]을(를) 던졌습니다.ServletException: javax.servlet.jsp.JspException: <formatNumber>에서 값 속성을 java.lang으로 구문 분석할 수 없습니다.번호: "-"] 근본 원인 포함
현상
<span>
<fmt:formatNumber value="${result.inhaleLvl }" pattern="#,###.#"/>
</span>
원인
JSTL의 formatNumber은 수치데이터를 형식에 따라 표현하는 태그 입니다.
그래서 수치값에 숫자만 들어와야 합니다.
저 같은 경우는 쿼리 쪽에서 수치값이 null이면 '-'으로 치환을 해줬는데 이것 때문에 났던 에러입니다.
수치값에 숫자만 들어와야 하는데 문자인 '-' 때문에 에러가 났음을 에러 메시지에서도 볼 수 있습니다.
해결
해결방법은 2가지였습니다. 둘 중에 더 편하신 걸로 사용하시길 바랍니다.
1. 쿼리에서 '-'값으로 치환했던 부분을 뺀다.
2. 쿼리 단에서 수치데이터 형식을 처리를 선행하고 JSTL은 뺀다.
굳이 수치값으로 따로 작업할 필요가 없다면 이 방법을 하시면 됩니다.
SELECT TO_CHAR(1234567890, 'FM999,999,999,999') AS VAL
FROM DUAL
결과 1,234,567,890
댓글