본문 바로가기

Programing

[JSTL] 나눗셈 연산

우리 팀 막내 민상이가 영훈이에게 무엇인가 도움을 청하는데, 왠지 불안해서 확인해보니.

문제는 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 파일은 아래와 같다.