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