代码之家  ›  专栏  ›  技术社区  ›  Juan

如何使用gettex()格式化struts2迭代器变量的bigdecimal属性

  •  0
  • Juan  · 技术社区  · 6 年前

    我在格式化 BigDecimal 在里面 Struts2 使用 <s:property> 与一起标记 getText() . 第一次使用它时(在迭代器标记之前),它会按预期工作。 第二次尝试使用它时,它具有迭代器变量的属性。在这种情况下,它不打印任何内容。 我有 支柱2 具有 devMod 我也没有任何例外。 但是,当使用 <S:财产> 无标签 获取文本() 按预期工作。

    我尝试过各种各样的替代方法,比如将变量封闭在 %{} ,一起移除封闭的, 将变量名与 hash tag 以及更多的变体。

    有一个使用 <s:text> 标记,但即使这是一种替代方法,我也希望知道如何使用 getText .

    “reporte”对象的类对JSP可用,其中包含getter和setter。

    public class Reporte {
    
        List<Reporte.Item> detalle = new ArrayList<>();
        BigDecimal totalGeneral;
    
        public List<Reporte.Item> getDetalle() {
            return detalle;
        }
    
        public void setDetalle(List<Reporte.Item> detalle) {
            this.detalle = detalle;
        }
    
        public void setTotalGeneral(BigDecimal totalGeneral){
            this.totalGeneral = totalGeneral;
        }
    
        public BigDecimal getTotalGeneral(){
            return this.totalGeneral;
        }
    
    
        public static class Item{ 
            private BigDecimal total;
    
            public BigDecimal getTotal() {
                return total;
            }
            public void setTotal(BigDecimal total) {
                this.total = total;
            }   
        }
    }
    

    JSP

    <!DOCTYPE html PUBLIC 
        "-//W3C//DTD XHTML 1.1 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <%@taglib prefix="s" uri="/struts-tags" %>
    
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
        <title>Reporte</title>
    </head>
    <body>
        <s:property value="getText('{0,number,#,##0.00}',{reporte.totalGeneral})"/> <br/>  <%-- works --%>
    
        <s:iterator var="det" value="reporte.detalle">
            <s:property value="total"/> <%-- works --%>
            <s:property value="getText('{0,number,#,##0.00}', {total})"/><br/> <%-- doesn't print anything --%>
        </s:iterator>
    </body>
    </html>
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   Juan    6 年前

    通过添加 #action. 之前 getText 当它在迭代器标记内被调用时。

    我的理解是 getText() 是的成员函数 Action ( SupportAction )因此,当操作位于堆栈顶部时,可以在不指定变量的情况下调用它。

    <s:property value="#action.getText('{0,number,#,##0.00}', {total})"/><br/>
    

    在迭代器内部,该项被放置在堆栈的顶部,以便调用 获取文本 操作的变量名需要被引用。

    提示: 真正让我感到欣慰的是 <s:degub> 标记,并在使用时 devMod ,的 ?debug=xml 获取堆栈转储(需要IE)操作后的参数。