우리 팀 막내 민상이가 영훈이에게 무엇인가 도움을 청하는데, 왠지 불안해서 확인해보니.
문제는 JSTL에서 시간을 단위로 줄이기 위해 나누기 60를 했는데 소수가 나오는 것이 문제였다고 한다.
JSTL의 연산자 : http://blog.daum.net/kimslovehouse/8239530 참고
JSP를 대충 만들어보면 아래와 같을 것이다. 아래서 굵은 부분은 1이 아닌 1.0이 나오게 된다.
<%@ 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" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<c:set var="seconds" value="60" />
${seconds div 60}
</body>
</html>
영훈이가 내준 해결책은 Java에서 integer 연산을 해서 문자열로 변수를 채우는 방법이다.
이 방법은 Java에서 HTML 문자열을 직접 전달해주는 것 만큼 나쁜 해경 방법이다. (유지보수가 어려워진다.)
가장 먼저 생각했던 것은 JavaScript에 값을 넣고 페이지가 로드 되었을 때 연산을 해서 값을 바꿔치기 하는 방법이 있었으나,
생각보다 간단한 방법은 포매터를 사용하는 방법이다.
JSTL Core <fmt:formatNumber> Tag : http://www.tutorialspoint.com/jsp/jstl_format_formatnumber_tag.htm
<%@ 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" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<c:set var="seconds" value="60" />
<fmt:formatNumber value="${seconds div 60}" />
</body>
</html>
사족으로 tld 파일과 jar 파일은 아래와 같다.
'Programing' 카테고리의 다른 글
[주석] 한 일보다는 이유를... (2) | 2014.01.23 |
---|---|
[설계] 건축과 소프트웨어 개발 (0) | 2013.11.20 |
원격제어:키보드 시물레이션 (0) | 2013.11.14 |
지역변수의 이름은 짧게 하는 것이 보기에 좋다. (0) | 2013.05.23 |
클래스 이름짓기 (0) | 2013.05.22 |