BigDecimal を指定しようとしているカスタム taglib がありますが、スケールが保持されません。BigDecimal が double に変換されてから、BigDecimal に戻されるようです。これは WebSphere のバグですか? または私は何かを逃していますか?
私のコントローラー(Springを使用しています):
@Controller
@RequestMapping("/BigDecimalTest")
public class BigDecimalTestController {
@RequestMapping
public String display(final Map<String, Object> model) {
model.put("bigDecimal", new BigDecimal("126.58"));
return "bigDecimalTest";
}
}
私のJSP:
<%@taglib uri="/custom-taglibs/bigDecimal.tld" prefix="bd"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>BigDecimal Test</title>
</head>
<body>
<bd:display value="${bigDecimal}"/>
</body>
</html>
私のtaglib記述子:
<taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
<description>BigDecimal test</description>
<tlib-version>1.0</tlib-version>
<short-name>bd</short-name>
<tag>
<description>Display informations about a BigDecimal</description>
<name>display</name>
<tag-class>BigDecimalDisplay</tag-class>
<body-content>empty</body-content>
<attribute>
<name>value</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
<type>java.math.BigDecimal</type>
</attribute>
</tag>
</taglib>
私のタグクラス:
public class BigDecimalDisplay extends TagSupport {
private static final long serialVersionUID = 2049900195699675393L;
private BigDecimal value;
public void setValue(final BigDecimal value) {
this.value = value;
}
@Override
public int doStartTag() throws JspException {
final JspWriter out = pageContext.getOut();
try {
out.print("<div>");
out.print("<div>Value: ");
out.print(value.toPlainString());
out.print("</div>");
out.print("<div>Scale: ");
out.print(value.scale());
out.print("</div>");
out.print("</div>");
} catch (final IOException e) {
throw new JspException(e);
}
return SKIP_BODY;
}
}
期待される出力:
値: 126.58
スケール: 2
実際の出力:
値: 126.5799999999999982946974341757595539093017578125
スケール: 46
編集: Spring を使用せずにこの問題を再現できました。obourgain は Jetty で再現できなかったため、実際には WebSphere のバグのようです。
編集:これは IBM バグPM48569でしょうか?