0

我自己的 jsp 标签有问题。我希望它允许空值,但如果我想为我的处理程序提供空值,则该值为 0 而不是空值。

我的处理程序:

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);
}
}

我的标签库:

<?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 为空,但是当它设置为 时BigDecimalStripper,它是 0。有人看到我犯的错误吗?

4

2 回答 2

0

Tomcat 内置的 EL 解析器将对所有扩展 Number 的类执行此操作。您必须使用 Tomcat 6.0.16 或更高版本,试试这个...

-Dorg.apache.el.parser.COERCE_TO_ZERO=false

于 2013-03-22T19:28:48.377 回答
0

接受的答案中的 COERCE_TO_ZERO 参数对我的设置(Tomcat 7.0.40,Liferay 6.1.2)没有任何改变,但是博客如何将空值传递给自定义标签库技巧确实如此。

替换BigDecimalObject标签属性设置器参数 ( setNumberToStrip) 并BigDecimal在存储在字段中之前转换为。如有必要,执行instanceofnull检查。

public void setNumberToStrip(Object numberToStrip) {
    if (value instanceof BigDecimal || value == null) {
        this.numberToStrip = (BigDecimal) numberToStrip;
    }
}
于 2021-05-18T11:37:45.847 回答