как отформатировать валюту в displaytag - PullRequest
2 голосов
/ 22 июня 2009

Я получаю значение суммы, например 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}"/>

Примечание: мы можем использовать MessageFormat в атрибуте формата displaytag: column

Ответы [ 4 ]

8 голосов
/ 23 июля 2009

Для чего вам нужен ваш класс? Вы могли бы написать это следующим образом:

<displaytag:column property="amount" format="$ {0,number,0,000.00}"/>
3 голосов
/ 22 июня 2009

DisplayTab не очень подходит для JSTL или EL и не поддерживает этот стиль форматирования. Вместо этого вам нужно расширить класс TableDecorator и поместить ссылку на него, используя атрибут decorator тега display: table.

Ваш подкласс декоратора должен определить метод получения для вашего отформатированного столбца валюты, что-то вроде:

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>

См. документацию для получения дополнительной информации

1 голос
/ 22 июня 2009

Вы можете использовать декоратор.

у вас будет что-то вроде

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>

С дисплей: тег тег ссылка

id : см. Uid

uid : уникальный идентификатор, используемый для идентификации этого Таблица. Объект, представляющий текущая строка также добавляется к pageContext под этим именем и текущий номер строки добавляется с помощью ключ uid_rowNum. Две таблицы в одном страница не может иметь одинаковый идентификатор пользователя (подкачка и сортировка повлияет на оба). Если нет "htmlId" указано то же значение будет использоваться для HTML-идентификатора сгенерированная таблица

0 голосов
/ 22 июня 2012

Вот что я использую:

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