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

.
Était-ce utile?

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"/>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top