2009-06-22 10 views
2

Je reçois la valeur du montant comme 4567.00, 8976.00 etc. Maintenant tout en distribuant cette valeur dans le displaytag je voudrais l'imprimer en tant que $ 4567.00 au lieu de juste 4567.00. Comment puis je faire ça? Pourvu que je veux juste utiliser l'étiquette d'affichage. Je peux réaliser la même chose en utilisant le core: out tag.comment mettre en forme la devise dans displaytag

$<core:out value="${variableInMyList}" /> 

Réponse trouvée [Comment je l'ai fait]

Créer 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 d'affichage

<displaytag:column title="Amount" property="amount" decorator="com.rj.blah.utils.decorator.NumberFormatDecorator" format="$ {0,number,0,000.00}"/> 

Note: nous pouvons utiliser l'attribut MessageFormat au format de displaytag: colonne

Répondre

3

DisplayTab est pas très JSTL ou EL amical, et ne supporte pas ce style de mise en forme. Au lieu de cela, vous devez étendre la classe TableDecorator et y mettre une référence en utilisant l'attribut decorator de l'affichage: tag table.

Votre sous-classe de décorateur doit définir une méthode de lecture pour votre formatée colonne de monnaie, quelque chose comme:

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érence décorateur, de le JSP:

<display:table name="myList"> 
    <display:column property="myProperty" title="My Property"/> 
    <display:column property="currency" title="Currency" decorator="test.MyColumnDecorator"/> 
</display:table> 

Voir the documentation pour plus d'informations

1

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; 

} 
} 

Check them out! http://displaytag.sourceforge.net/10/tut_decorators.html

Si vous ne souhaitez pas utiliser les décorateurs, 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:tag tag reference

id: voir uid

uid: ID unique utilisé pour identifier ce tableau . L'objet représentant la ligne actuelle est également ajouté au pageContext sous ce nom et le numéro de ligne actuel est ajouté à l'aide de la clé uid_rowNum.Deux tables dans la même page ne peuvent pas avoir le même ID (la pagination et le tri affecteront les deux). Si aucun « htmlId » est spécifié la même valeur sera utilisée pour l'id html de la table générée

+0

** $ ** comme je l'ai dit Ce n'est pas ce que je veux faire. Mais merci pour le concept de décorateur –

8

Qu'est-ce que vous avez besoin de votre classe? Vous pouvez l'écrire comme suit:

<displaytag:column property="amount" format="$ {0,number,0,000.00}"/> 
+0

Comment formater la monnaie, si au lieu d'un nombre, le type de la propriété est String. J'ai essayé '$ {0, string, 0,000.00}' et $ '{0, String, 0,000.00}' mais cela n'a pas fonctionné. –

0

Voici ce que j'utilise:

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