如何在displaytag中格式化货币

时间:2009-06-22 15:54:16

标签: java displaytag number-formatting

我得到的金额如4567.00,8976.00等。现在,虽然在displaytag中显示这个值,我想将其打印为$ 4567.00而不是4567.00。我怎样才能做到这一点? 只要我想使用显示标签。我可以使用core:out tag来实现同样的目标。

$<core:out value="${variableInMyList}" />

找到答案[我是怎么做的]

创建一个新类:

public class NumberFormatDecorator implements DisplaytagColumnDecorator{
    Logger logger = MyLogger.getInstance ( );

    public Object decorate(Object columnValue, PageContext pageContext, MediaTypeEnum media) throws DecoratorException {        
        try
        {
            Object colVal = columnValue;
            if ( columnValue != null ){
                colVal = Double.parseDouble( (String)columnValue );
            }
            return colVal;
        }catch ( Exception nfe ){}
        logger.error( "Unable to convert to Numeric Format");
        return columnValue; // even if there is some exception return the original value
    }
}

现在显示标签

<displaytag:column title="Amount" property="amount" decorator="com.rj.blah.utils.decorator.NumberFormatDecorator" format="$ {0,number,0,000.00}"/>

注意:我们可以使用displaytag的格式属性中的MessageFormat:column

4 个答案:

答案 0 :(得分:8)

你需要什么课? 您可以按如下方式编写它:

<displaytag:column property="amount" format="$ {0,number,0,000.00}"/>

答案 1 :(得分:3)

DisplayTab不是非常JSTL或EL友好,并且不支持这种格式化。相反,您需要扩展TableDecorator类并使用display:table标签的decorator属性对其进行引用。

您的装饰器子类应为您的格式化货币列定义一个getter方法,如:

public class MyTableDecorator extends TableDecorator {
    public String getCurrency() {
        MyRowType row = getCurrentRowObject();
        return row.getCurrency.format();
    }
}

<display:table name="myList" decorator="test.MyTableDecorator">
    <display:column property="myProperty" title="My Property"/>
    <display:column property="currency" title="Currency"/>
</display:table>

或者,您可以实现DisplaytagColumnDecorator接口,并从JSP引用该装饰器:

<display:table name="myList">
    <display:column property="myProperty" title="My Property"/>
    <display:column property="currency" title="Currency" decorator="test.MyColumnDecorator"/>
</display:table>

有关详细信息,请参阅the documentation

答案 2 :(得分:1)

你可以使用装饰师。

你会有像

这样的东西
class myDecorator extends TableDecorator{

 public String getCurrency(){
   MyClass myClass  = (MyClass)getCurrentRow();


   return "$"+myClass.getCurrency;

 }
}

检查出来! http://displaytag.sourceforge.net/10/tut_decorators.html

如果您不想使用装饰器,可以使用id属性和JSTL

<display:table htmlId="list" name="mylist" id="row">

   <display:column>
    <%-- row is your current list object. row.currency calls getCurrency()
         $ goes right out to HTML
    --%>
     $ <c:out="${row.currency}"/>
   </display:column>
</display:table>

来自display:tag tag reference

  

id :请参阅uid

     

uid :用于识别此标识的唯一ID   表。代表的对象   当前行也被添加到   pageContext下有这个名字和   使用。添加当前行号   关键字uid_rowNum。两张桌子一样   页面不能有相同的uid(分页   和排序将影响两者)。如果不   “htmlId”指定相同的值   将用于.html的id   生成表

答案 3 :(得分:0)

以下是我使用的内容:

<d:column title="Cost" property="cost" format="{0,number,currency}" sortable="true"/>