Pergunta

Estou recebendo o valor do montante como 4567,00, 8976,00 etc. Agora, enquanto dispalying este valor em displaytag eu gostaria de imprimi-lo como $ 4567,00 em vez de apenas 4567,00. Como eu posso fazer isso? Desde que eu só quero usar tag display. Eu posso conseguir a mesma coisa usando core:. A tag

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

Resposta Encontrado [Como eu fiz isso]

Crie uma nova 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
    }
}

Agora, em tag de exibição

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

Nota: podemos usar o MessageFormat no atributo formato de displaytag: coluna

Foi útil?

Solução

DisplayTab não é muito JSTL ou EL amigável, e não suporta esse estilo de formatação. Em vez disso, você precisa estender a classe TableDecorator e colocar uma referência a ele usando o atributo decorador do display:. Tag tabela

Seu subclasse decorador deve definir um método getter para sua coluna de moeda formatado, algo como:

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>

Como alternativa, você pode implementar a interface DisplaytagColumnDecorator, e referência que decorador do JSP:

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

documentação para obter mais informações

Outras dicas

O que você precisa de sua classe para? Você poderia escrevê-lo da seguinte forma:

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

Você pode usar um decorador.

você teria algo como

class myDecorator extends TableDecorator{

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


   return "$"+myClass.getCurrency;

 }
}

Vê-los! http://displaytag.sourceforge.net/10/tut_decorators.html

Se você não quiser usar decoradores, você poderia usar o atributo 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>

A partir display: referência tag tag

id : veja uid

uid : id único usado para identificar este tabela. O objecto que representa o linha corrente também é adicionado à pageContext sob este nome eo número de linha actual é adicionado usando o uid_rowNum chave. Duas mesas na mesma página não pode ter o mesmo uid (paginação e classificação afetará ambos). Se não "HtmlId" é especificado o mesmo valor será utilizado para o ID de html do tabela gerada

Aqui está o que eu uso:

<d:column title="Cost" property="cost" format="{0,number,currency}" sortable="true"/>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top