Pregunta

Estoy obteniendo el valor de una cantidad como 4567.00, 8976.00, etc. Ahora, mientras visualizo este valor en displaytag, me gustaría imprimirlo como $ 4567.00 en lugar de solo 4567.00. ¿Cómo puedo hacer eso? Siempre que solo quiera usar la etiqueta de visualización. Puedo lograr lo mismo usando core: out tag.

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

Respuesta encontrada [Cómo lo hice]

Crear una nueva clase:

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
    }
}

ahora en la etiqueta de visualización

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

Nota: podemos usar el atributo MessageFormat en formato de displaytag: columna

¿Fue útil?

Solución

DisplayTab no es muy compatible con JSTL o EL, y no admite ese estilo de formato. En su lugar, debe extender la clase TableDecorator y ponerle una referencia usando el atributo decorador de la etiqueta display: table.

Su subclase de decorador debe definir un método getter para su columna de moneda formateada, algo así como:

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

y

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

Alternativamente, puede implementar la interfaz DisplaytagColumnDecorator y hacer referencia a ese decorador desde el JSP:

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

Consulte la documentación para obtener más información

Otros consejos

¿Para qué necesitas tu clase? Puede escribirlo de la siguiente manera:

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

Podrías usar un decorador.

tendrías algo como

class myDecorator extends TableDecorator{

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


   return "$"+myClass.getCurrency;

 }
}

¡Míralos! http://displaytag.sourceforge.net/10/tut_decorators.html

Si no desea usar decoradores, puede usar el atributo id y 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: etiqueta etiqueta referencia

  

id : ver uid

     

uid : Identificación única utilizada para identificar esto   mesa. El objeto que representa el   la fila actual también se agrega a   pageContext bajo este nombre y el   el número de fila actual se agrega usando el   clave uid_rowNum. Dos mesas en el mismo   la página no puede tener el mismo uid (paginación   y la clasificación afectará a ambos). Si no   " htmlId " se especifica el mismo valor   se usará para la identificación html del   tabla generada

Esto es lo que uso:

<d:column title="Cost" property="cost" format="{0,number,currency}" sortable="true"/>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top