我在格式化 BigDecimal 在里面 Struts2 使用 <s:property> 与一起标记 getText() . 第一次使用它时(在迭代器标记之前),它会按预期工作。 第二次尝试使用它时,它具有迭代器变量的属性。在这种情况下,它不打印任何内容。 我有 支柱2 具有 devMod 在 我也没有任何例外。 但是,当使用 <S:财产> 无标签 获取文本() 按预期工作。
BigDecimal
Struts2
<s:property>
getText()
支柱2
devMod
<S:财产>
获取文本()
我尝试过各种各样的替代方法,比如将变量封闭在 %{} ,一起移除封闭的, 将变量名与 hash tag 以及更多的变体。
%{}
hash tag
有一个使用 <s:text> 标记,但即使这是一种替代方法,我也希望知道如何使用 getText .
<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>
通过添加 #action. 之前 getText 当它在迭代器标记内被调用时。
#action.
我的理解是 getText() 是的成员函数 Action ( SupportAction )因此,当操作位于堆栈顶部时,可以在不指定变量的情况下调用它。
Action
SupportAction
<s:property value="#action.getText('{0,number,#,##0.00}', {total})"/><br/>
在迭代器内部,该项被放置在堆栈的顶部,以便调用 获取文本 操作的变量名需要被引用。
获取文本
提示: 真正让我感到欣慰的是 <s:degub> 标记,并在使用时 devMod ,的 ?debug=xml 获取堆栈转储(需要IE)操作后的参数。
<s:degub>
?debug=xml