Wie forma Währung in displaytag
-
06-07-2019 - |
Frage
Ich erhalte den Wert der Menge wie 4567,00, 8976,00 etc. Nun, während dieser Wert in displaytag dispalying ich es als $ 4567,00 statt 4567,00 nur drucken möchten. Wie kann ich das machen? Vorausgesetzt, ich möchte nur Display-Tag verwenden. Ich kann die gleiche Sache mit Kern acheive. Out-Tag
$<core:out value="${variableInMyList}" />
Antwort gefunden [Wie ich tue es]
Erstelleneine neue Klasse:
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
}
}
jetzt im Display-Tag
<displaytag:column title="Amount" property="amount" decorator="com.rj.blah.utils.decorator.NumberFormatDecorator" format="$ {0,number,0,000.00}"/>
Hinweis: wir das Message im Format Attribute displaytag verwenden: Spalte
Lösung
DisplayTab ist nicht sehr JSTL oder EL freundlich, und nicht, dass die Art der Formatierung nicht unterstützt. Stattdessen müssen Sie die TableDecorator Klasse erweitern und einen Verweis auf sie setzen die Dekorateur Attribut des Displays mit:. Table-Tag
Ihre Dekorateur Unterklasse sollte eine Getter-Methode für die formatierten Währungsspalt, so etwas wie definieren:
public class MyTableDecorator extends TableDecorator {
public String getCurrency() {
MyRowType row = getCurrentRowObject();
return row.getCurrency.format();
}
}
und
<display:table name="myList" decorator="test.MyTableDecorator">
<display:column property="myProperty" title="My Property"/>
<display:column property="currency" title="Currency"/>
</display:table>
Alternativ können Sie den DisplaytagColumnDecorator Schnittstelle und Referenz implementieren, die von der JSP-Dekorateur:
<display:table name="myList">
<display:column property="myProperty" title="My Property"/>
<display:column property="currency" title="Currency" decorator="test.MyColumnDecorator"/>
</display:table>
Siehe die Dokumentation für weitere Informationen
Andere Tipps
Was brauchen Sie Ihre Klasse für? Man könnte es wie folgt schreiben:
<displaytag:column property="amount" format="$ {0,number,0,000.00}"/>
Sie könnten einen Dekorateur verwenden.
Sie würde so etwas haben
class myDecorator extends TableDecorator{
public String getCurrency(){
MyClass myClass = (MyClass)getCurrentRow();
return "$"+myClass.getCurrency;
}
}
Überprüfen Sie sie heraus! http://displaytag.sourceforge.net/10/tut_decorators.html
Wenn Sie möchten, Dekorateure nicht verwenden, können Sie das Attribut-ID verwenden und 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 : siehe uid
uid : Eindeutige ID zur Identifizierung dieses Tabelle. Das Objekt, das die aktuelle Zeile wird auch die hinzugefügte Pagecontext unter diesem Namen und die aktuelle Zeilennummer hinzugefügt, um die Verwendung von Schlüssel uid_rowNum. Zwei Tische in der gleichen Seite kann nicht die gleiche uid (Paging und Sortierung beeinflussen beide). wenn nein „HtmlId“ ist der gleiche Wert angegeben wird für die HTML-ID von der verwendet werden generierte Tabelle
Hier ist, was ich benutze:
<d:column title="Cost" property="cost" format="{0,number,currency}" sortable="true"/>