如何使用getText()格式化Struts2迭代器变量的BigDecimal属性

时间:2018-06-10 00:48:02

标签: jsp struts2 el ognl

我在BigDecimal使用Struts2标记和<s:property>格式化getText()时出现问题。 我第一次使用它(在迭代器标记之前),它按预期工作。 我第二次尝试使用它时,它具有迭代器变量的属性。在这种情况下,它不会打印任何东西。 我在上有Struts2 devMod,我也没有获得任何例外情况。 但是,使用不带<s:property>的{​​{1}}标记输出时,相同的属性可按预期工作。

我尝试了各种替代方法,例如将变量括在getText()中,删除全部封闭, 使用%{}添加变量的名称,以及更多变体。

有一个使用hash tag标记的答案,但即使这是另一种选择,我想知道如何使用<s:text>

&#34; reporte&#34;的课程在Action中使用getter和setter为JSP提供的对象。

getText

JSP

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

1 个答案:

答案 0 :(得分:0)

在迭代器标记内调用#action.之前添加getText来解决问题。

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

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

在迭代器中,项目放在堆栈的顶部,因此要调用操作的getText,需要引用变量名称。

提示:我真正想到的是使用<s:degub>标记,并且在使用devMod时,?debug=xml参数跟随获取堆栈转储的动作(需要IE)。