Dúvida besta, formatação de número em JSP

Por favor

Não estou conseguindo formatar valores numéricos (primitivos ou wrappers) em páginas JSP usando as taglib de fmt.

Tentei com fmt:formatNumber e dá NumberFormatException

Sugestões?

<fmt:formatNumber value="${ cliente.saldo}" type="currency" />

20/06/2006 - 19:48:43 ERROR : (StandardWrapperValve.java:invoke:253) Servlet.service() for servlet action threw exception java.lang.NumberFormatException: For input string: "${ cliente.saldo}" at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source) at java.lang.Double.valueOf(Unknown Source) at org.apache.taglibs.standard.tag.common.fmt.FormatNumberSupport.doEndTag(Unknown Source) at org.apache.jsp.cliente_005fmenu_jsp._jspx_meth_fmt_formatNumber_0(org.apache.jsp.cliente_005fmenu_jsp:366) at org.apache.jsp.cliente_005fmenu_jsp._jspx_meth_logic_present_0(org.apache.jsp.cliente_005fmenu_jsp:222) at org.apache.jsp.cliente_005fmenu_jsp._jspService(org.apache.jsp.cliente_005fmenu_jsp:108) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97) at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264) at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:672) at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:463) at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:398) at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301) at org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1063) at org.apache.struts.tiles.TilesRequestProcessor.doForward(TilesRequestProcessor.java:263) at org.apache.struts.action.RequestProcessor.internalModuleRelativeForward(RequestProcessor.java:1001) at org.apache.struts.tiles.TilesRequestProcessor.internalModuleRelativeForward(TilesRequestProcessor.java:345) at org.apache.struts.action.RequestProcessor.processForward(RequestProcessor.java:560) at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:209) at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194) at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432) at javax.servlet.http.HttpServlet.service(HttpServlet.java:709) at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:672) at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:463) at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:398) at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301) at org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1063) at org.apache.struts.tiles.TilesRequestProcessor.doForward(TilesRequestProcessor.java:263) at org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:386) at org.apache.struts.tiles.TilesRequestProcessor.processForwardConfig(TilesRequestProcessor.java:318) at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:229) at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194) at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432) at javax.servlet.http.HttpServlet.service(HttpServlet.java:709) at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148) at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:831) at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:639) at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1203) at java.lang.Thread.run(Unknown Source)

Imprima o valor que esta vindo sem formatação, simplesmente:

${cliente.saldo}

e ao lado imprima o valor com a taglib, assim poderá ver se o valor de saldo é realmente um numérico.

Naum sei com a taglib, mas se tentar formatar um valor no java que esteja com , no lugar de . da esse erro.

t+

Consigo imprimir o valor sem problemas usando <c:out /> por exemplo.

Bom, já que não apareceu uma solução eu fiz de um jeito aqui. Não ficou elegante.

Mas criei uma outra propriedade no POJO e um método que retorna uma String com o número formatado usando o NumberFormat.

Não gostei dessa solução porque fui obrigado a criar um atributo desnecessário, e pq tenho que fazer isso para cada propriedade númerica que quero formatar de algum jeito.

Alguma outro sugestão?