как отформатировать валюту в displaytag
-
06-07-2019 - |
Вопрос
Я получаю значение суммы, например 4567,00, 8976,00 и т. д.Теперь, отображая это значение в displaytag, я хотел бы напечатать его как 4567,00 долларов США, а не просто 4567,00 долларов США.Как мне это сделать?При условии, что я просто хочу использовать тег отображения.Я могу добиться того же, используя тег core:out.
$<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
}
}
теперь в теге display
<displaytag:column title="Amount" property="amount" decorator="com.rj.blah.utils.decorator.NumberFormatDecorator" format="$ {0,number,0,000.00}"/>
Примечание: мы можем использовать MessageFormat в атрибуте формата displaytag:column
Решение
DisplayTab не очень совместим с JSTL или EL и не поддерживает этот стиль форматирования.Вместо этого вам нужно расширить класс TableDecorator и поместить на него ссылку, используя атрибут декоратора тега 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>
Видеть документация Чтобы получить больше информации
Другие советы
Для чего тебе нужен класс? Вы могли бы написать это следующим образом:
<displaytag:column property="amount" format="$ {0,number,0,000.00}"/>
Вы можете использовать декоратор.
у вас будет что-то вроде
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. Две таблицы в одном страница не может иметь одинаковый идентификатор пользователя (подкачка и сортировка повлияет на оба). Если нет Quot & & htmlId Quot; указано то же значение будет использоваться для HTML-идентификатора сгенерированная таблица
Вот что я использую:
<d:column title="Cost" property="cost" format="{0,number,currency}" sortable="true"/>