Domanda

Sto ottenendo il valore di un importo come 4567,00, 8976,00 ecc. Ora, mentre disporto questo valore in displaytag, vorrei stamparlo come 4567,00 $ anziché solo 4567,00. Come lo posso fare? A condizione che voglio solo usare il tag display. Posso ottenere la stessa cosa usando core: tag out.

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

Risposta trovata [Come ho fatto]

Crea una nuova 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
    }
}

ora nel tag display

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

Nota: possiamo usare MessageFormat nel formato attributo di displaytag: colonna

È stato utile?

Soluzione

DisplayTab non è molto compatibile con JSTL o EL e non supporta questo stile di formattazione. Invece, è necessario estendere la classe TableDecorator e inserire un riferimento ad essa utilizzando l'attributo decorator del display: tag table.

La sottoclasse del decoratore dovrebbe definire un metodo getter per la colonna di valuta formattata, ad esempio:

public class MyTableDecorator extends TableDecorator {
    public String getCurrency() {
        MyRowType row = getCurrentRowObject();
        return row.getCurrency.format();
    }
}

e

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

In alternativa, puoi implementare l'interfaccia DisplaytagColumnDecorator e fare riferimento a quel decoratore dal JSP:

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

Vedi la documentazione per maggiori informazioni

Altri suggerimenti

A cosa ti serve la lezione? Puoi scriverlo come segue:

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

Potresti usare un decoratore.

avresti qualcosa del genere

class myDecorator extends TableDecorator{

 public String getCurrency(){
   MyClass myClass  = (MyClass)getCurrentRow();


   return "$"+myClass.getCurrency;

 }
}

Dai un'occhiata! http://displaytag.sourceforge.net/10/tut_decorators.html

Se non si desidera utilizzare i decoratori, è possibile utilizzare l'attributo id e 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>

Da display: riferimento tag tag

  

id : vedi uid

     

uid : ID univoco utilizzato per identificarlo   tavolo. L'oggetto che rappresenta il   la riga corrente viene aggiunta anche a   pageContext con questo nome e il   il numero di riga corrente viene aggiunto utilizzando il   chiave uid_rowNum. Due tavoli nello stesso   la pagina non può avere lo stesso uid (paging   e l'ordinamento influenzerà entrambi). Se no   quot &; & htmlId quot; è specificato lo stesso valore   verrà utilizzato per l'ID HTML del file   tabella generata

Ecco cosa uso:

<d:column title="Cost" property="cost" format="{0,number,currency}" sortable="true"/>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top