comment formater la monnaie dans displaytag
-
06-07-2019 - |
Question
Je reçois la valeur d'un montant comme 4567.00, 8976.00 etc. Maintenant, tout en affichant cette valeur dans displaytag, je voudrais l'imprimer sous la forme 4567,00 $ au lieu de 4567,00 $. Comment puis je faire ça? Pourvu que je veux juste utiliser la balise display. Je peux obtenir la même chose avec core: out tag.
$<core:out value="${variableInMyList}" />
Réponse trouvée [Comment je l'ai fait]
Créez une nouvelle classe:
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
}
}
maintenant dans la balise display
<displaytag:column title="Amount" property="amount" decorator="com.rj.blah.utils.decorator.NumberFormatDecorator" format="$ {0,number,0,000.00}"/>
Remarque: nous pouvons utiliser l'attribut de format MessageFormat dans displaytag: column
.La solution
DisplayTab n'est pas très convivial avec JSTL ou EL, et ne supporte pas ce style de formatage. Au lieu de cela, vous devez étendre la classe TableDecorator et y mettre une référence en utilisant l’attribut decorator de la balise display: table.
Votre sous-classe de décorateur doit définir une méthode d'accesseur en lecture pour votre colonne de devise formatée, comme par exemple:
public class MyTableDecorator extends TableDecorator {
public String getCurrency() {
MyRowType row = getCurrentRowObject();
return row.getCurrency.format();
}
}
et
<display:table name="myList" decorator="test.MyTableDecorator">
<display:column property="myProperty" title="My Property"/>
<display:column property="currency" title="Currency"/>
</display:table>
Vous pouvez également implémenter l'interface DisplaytagColumnDecorator et référencer ce décorateur à partir du fichier JSP:
<display:table name="myList">
<display:column property="myProperty" title="My Property"/>
<display:column property="currency" title="Currency" decorator="test.MyColumnDecorator"/>
</display:table>
Voir la documentation pour plus d'informations
Autres conseils
Pourquoi avez-vous besoin de votre classe? Vous pouvez l'écrire comme suit:
<displaytag:column property="amount" format="$ {0,number,0,000.00}"/>
Vous pouvez utiliser un décorateur.
vous auriez quelque chose comme
class myDecorator extends TableDecorator{
public String getCurrency(){
MyClass myClass = (MyClass)getCurrentRow();
return "$"+myClass.getCurrency;
}
}
Découvrez-les! http://displaytag.sourceforge.net/10/tut_decorators.html
Si vous ne souhaitez pas utiliser de décorateur, vous pouvez utiliser l'attribut id et 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>
De display: référence à une balise
id : voir l'identifiant
uid : identifiant unique utilisé pour l'identifier table. L'objet représentant le la ligne actuelle est également ajoutée à la pageContext sous ce nom et le le numéro de ligne actuel est ajouté en utilisant le clé uid_rowNum. Deux tables dans le même page ne peut pas avoir le même uid (paging et le tri affectera les deux). Sinon " htmlId " est spécifié la même valeur sera utilisé pour l'identifiant HTML du tableau généré
Voici ce que j'utilise:
<d:column title="Cost" property="cost" format="{0,number,currency}" sortable="true"/>