come formattare la valuta in displaytag
-
06-07-2019 - |
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
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"/>