Vraptor - Passando um double para o jsp

Olá, estou estudando o framework Vraptor e fiz o seguinte método:

public double decimal(){ return 10.20; }

e quando tento pegar o resultado na JSP da seguinte forma:

[code]

Teste ${double} [/code]

ele da o seguinte erro:

br.com.caelum.vraptor.view.ResultException: org.apache.jasper.JasperException: javax.el.ELException: Failed to parse the expression [${double}]
br.com.caelum.vraptor.view.DefaultPageResult.defaultView(DefaultPageResult.java:69)
br.com.caelum.vraptor.interceptor.ForwardToDefaultViewInterceptor.intercept(ForwardToDefaultViewInterceptor.java:60)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
br.com.caelum.vraptor.interceptor.OutjectResult.intercept(OutjectResult.java:67)
br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:59)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:85)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

caso eu troque o método para uma string ou para um integer ele funciona perfeitamente.

Agradeço dese já pela ajuda !

mesmo erro aqui =/

alguma sugestão?

Pessoal,

Uma vez cai nessa “armadilha”, de o meu retorno no request ter o mesmo nome de uma palavra reservada ou “proibida”, como é o caso que foi apresentado…

Vou mostrar duas formas que podem ser usadas p/ contornar este problema… no entando acredito que devem existir implementações mais elegantes.

:arrow: Você pode definir um outro nome no request para usar no JSP

AppController.java

[code]@Resource
public class AppController {

private Result result;
private HttpServletRequest request;

public AppController(Result result, HttpServletRequest request) {
    this.result = result;
    this.request = request;
}

@Get
@Path("/")
public void index() {
    // WEB-INF/jsp/app/index.jsp
}

@Get
@Path("/retornaDouble")
public void retornaDouble() {
    System.out.println("#### Retornando Double no request");
    
    // Setando no request o conteudo double com outro nome
    request.setAttribute("minhaDouble",  10.20);
    
    // Redirecionando para o metodo index(), você pode redirecionar para onde quiser obviamente...
    result.redirectTo(this).index();
}

}
[/code]

:arrow: Você pode criar uma classe que sirva como um Wrapper

DoubleVRaptor.java

[code]import sun.misc.FloatingDecimal;

public class DoubleVRaptor extends Number implements Comparable<DoubleVRaptor> {

private Double valor;

public DoubleVRaptor(Double valor) {
    this.valor = valor;
}

public DoubleVRaptor(double valor) {
    this.valor = valor;
}

public DoubleVRaptor(String valor) {
    this.valor = new Double(valor);
}

public Double getValor() {
    return valor;
}

public void setValor(Double valor) {
    this.valor = valor;
}

@Override
public String toString() {
    return new FloatingDecimal(valor).toJavaFormatString();
}

@Override
public int intValue() {
    return valor.intValue();
}

@Override
public long longValue() {
    return valor.longValue();
}

@Override
public float floatValue() {
    return valor.floatValue();
}

@Override
public double doubleValue() {
    return valor.doubleValue();
}

@Override
public int compareTo(DoubleVRaptor o) {
    return valor.compareTo(o.getValor());
}

}
[/code]

AppController.java

@Resource
public class AppController {

    @Get
    @Path("/")
    public void index() {
        // WEB-INF/jsp/app/index.jsp
    }

    @Get
    @Path("/retornaDouble")
    public DoubleVRaptor retornaDouble() {
        return new DoubleVRaptor(10.20);
    }
}

retornaDouble.jsp

&lt;%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %&gt; &lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&gt; &lt;html&gt; &lt;head&gt; &lt;meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"&gt; &lt;title&gt;VRaptor 3.4.0&lt;/title&gt; &lt;link rel="icon" href="favicon.jpg" type="image/jpg" /&gt; &lt;/head&gt; &lt;body&gt; Valor do DoubleVRaptor: ${doubleVRaptor} <BR><BR> Valor do DoubleVRaptor Formatado: &lt;fmt:formatNumber type="number" maxIntegerDigits="3" value="${doubleVRaptor}" /&gt; &lt;/body&gt; &lt;/html&gt;

Bom seria isso… como disse … não são as implementações mais elegantes, mas até certo ponto podem resolver oq vocês estão pretendendo fazer…

Abraços