我遇到了自己的jsp标签问题。我希望它允许空值,但如果我想给我的处理程序赋予空值,则值为0而不是null。
我的处理程序:
public class BigDecimalStripper extends SimpleTagSupport {
private BigDecimal numberToStrip;
public void setNumberToStrip(BigDecimal numberToStrip) {
this.numberToStrip = numberToStrip;
}
@Override
public void doTag() throws JspException, IOException {
if (numberToStrip == null) {
return;
}
JspWriter out = getJspContext().getOut();
BigDecimal withoutTrailingZeros = numberToStrip.stripTrailingZeros();
String formattedNumber = withoutTrailingZeros.toPlainString();
out.println(formattedNumber);
}
}
我的taglib:
<?xml version="1.0" encoding="UTF-8" ?>
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>2.0</jsp-version>
<short-name>Fishie JSP Utils</short-name>
<tag>
<name>BigDecimalStrip</name>
<tag-class>ch.fishie.jsp.utils.BigDecimalStripper</tag-class>
<body-content>scriptless</body-content>
<attribute>
<name>numberToStrip</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
我的JSP代码:
<c:forEach items="${pagination.pageEntries}" var="aquarium">
<tr>
<td class="name"><c:out value="${aquarium.name}" /></td>
<td class="length"><fu:BigDecimalStrip numberToStrip="${aquarium.length}" /></td>
.....
aquarium.length为null,但当它设置为BigDecimalStripper
时,它为0。
有人看到我犯的错误吗?
答案 0 :(得分:0)
Tomcat内置的EL解析器将为所有扩展Number的类执行此操作。 您必须使用Tomcat 6.0.16或更高版本,请尝试此...
-Dorg.apache.el.parser.COERCE_TO_ZERO=false
答案 1 :(得分:0)
已接受答案中的 COERCE_TO_ZERO 参数对我的设置(Tomcat 7.0.40、Liferay 6.1.2)没有任何影响,但博客 How To Pass A Null Value To A Custom Tag Library 技巧没有改变。
在标签属性设置器参数 (BigDecimal
) 中将 Object
替换为 setNumberToStrip
并在存储到字段之前转换为 BigDecimal
。如有必要,执行 instanceof 或 null 检查。
public void setNumberToStrip(Object numberToStrip) {
if (value instanceof BigDecimal || value == null) {
this.numberToStrip = (BigDecimal) numberToStrip;
}
}