[Resolvido] Campo data dando trabalho em JSP (MVC)

Estou com a seguinte duvida:

Tenho uma pagina(JSP) que exibe os dados do cliente para que possa alterá-lo. - alteraCliente.jsp
Tenho o controller que faz essa consulta(chama o dao) e retorna para o JSP. - alteraClienteMVC.java.

No alteraClienteMVC.java eu coloco o objeto recebido assim:

req.setAttribute("cliente", clienteRet);

E no jsp eu faço eu exibo em uma tabela (vou colocar só a do campo data que é onde estou com problemas):

<td><cal:campoData  id="dataNascimento" value="${cliente.dataNascimento.time}"/></td> 

Ps: estou “aproveitando” este codigo que é para tanto para adicionar quanto para alterar.

E o arquivo taglib esta assim:

<%@ tag language="java" pageEncoding="ISO-8859-1"%>
<%@ attribute name="id" required="true"%>
<%@ attribute name="value" %>

<input type="text" id="${id}" name="${id}" value="${value}"  />
<script type="text/javascript" >
$("#${id}").datepicker({dateFormat: 'dd/mm/yy'});
</script>

A questão é que quando ele retorna no alteraClienteMVC ele retorna por exemplo:

Thu Feb 10 00:00:00 BRST 1966

Só que no campo data do formulario JSP eu teria que fazer o tratamento para retornar:

10/02/1966

Quando tentei tratar no alteraClienteMVC.java (que eu acho que é o mais correto) eu nao consigo, pois eu até faço a conversão para String pelo SimpleDateFormat, mas ai não consigo passar para o JSP de uma forma que estaria respeitando as boas praticas de desenvolvimento, ou seja, o objetivo seria passar só o objeto cliente e nao ficar criando mais variaveis para passar um String que supostamente esta no objeto.

No JSP, eu estou tentando exibir esse codigo sem scriptlet, somente com JSTL, tambem para tentar manter o mais enxuto possivel e manter tambem boas praticas de desenvolvimento.

Qual é a forma mais “correta” de se fazer isso?
Seria realmente colocar um “scriptlet” na jsp somente para formatar a data(Date para String)?
Passar um outro parametro do alteraClienteMVC.java para alteraCliente.jsp?
por exemplo:

req.setAttribute("dataFormatada", dataFormatada);

Ou teria como formatar no JSTL(no arquivo taglib)? (que acho que seria a mais limpa, mas procurei definir um pattern, mas nao encontrei como fazer).

Eu agradeço a ajuda, pois gostaria de alem de resolver o problema, resolvê-lo de forma “correta”.

Esse tópico pode ajudar:

http://www.guj.com.br/java/38211-formatar-datas-com-jstl

[quote=kunglao]Esse tópico pode ajudar:

http://www.guj.com.br/java/38211-formatar-datas-com-jstl[/quote]

Obrigado pela dica Kunglao, mas o fmt:formatDate eu não consegui utilizar, pois ele não é “editável”(como o input type=text, por exemplo), o objetivo é retornar os valores para que o usuário possa alterar.

Opa, encontrei uma solução interessante:

<input type="text" id="dataNascimento" value="<fmt:formatDate pattern="dd/MM/yyyy" value="${cliente.dataNascimento.time}" />" />

Essa atinge o meu objetivo, mas ainda assim gostaria de saber se é assim que se faz.
O meu objetivo é aprender a fazer da forma correta, e não sei se assim estou fazendo, pois ai já esta entrando algumas coisas que estou aprendendo ainda, como MVC.

Como eu comentei, tem várias soluções, mas precisamos buscar a melhor! rs

[quote=scrat]Opa, encontrei uma solução interessante:

<input type="text" id="dataNascimento" value="<fmt:formatDate pattern="dd/MM/yyyy" value="${cliente.dataNascimento.time}" />" />

Essa atinge o meu objetivo, mas ainda assim gostaria de saber se é assim que se faz.
O meu objetivo é aprender a fazer da forma correta, e não sei se assim estou fazendo, pois ai já esta entrando algumas coisas que estou aprendendo ainda, como MVC.

Como eu comentei, tem várias soluções, mas precisamos buscar a melhor! rs

[/quote]

Opa, da forma que você fez não está errado, mas se quiser melhorar a legibilidade do seu código, pode usar o atributo var dessa forma:

<fmt:formatDate pattern="dd/MM/yyyy" value="${cliente.dataNascimento.time}" var="dataFormatada" />
<input type="text" id="dataNascimento" value="${dataFormatada}" />

Verdade, fica mais legivel!

E será que a formatação da data está no lugar certo?
Digo, seria mesmo na camada de apresentação ou deveria fazer essa “mascara” na controller?

Eu cheguei a pensar em até mudar na minha classe o atributo data de Calendar para String e só converter para date quando fosse inserir no banco, assim eu conseguiria fazer essa formatação logo no DAO quando fosse recuperar a data, que a converteria para string, o que acham?

Agora na verdade é questão do que fica melhor e qual a melhor prática! rs

[quote=scrat]Verdade, fica mais legivel!

E será que a formatação da data está no lugar certo?
Digo, seria mesmo na camada de apresentação ou deveria fazer essa “mascara” na controller?

Eu cheguei a pensar em até mudar na minha classe o atributo data de Calendar para String e só converter para date quando fosse inserir no banco, assim eu conseguiria fazer essa formatação logo no DAO quando fosse recuperar a data, que a converteria para string, o que acham?

Agora na verdade é questão do que fica melhor e qual a melhor prática! rs[/quote]

Quanto à formatação, não vejo problema algum, afinal você não está validando nada, apenas tratando a exibição do dado, sendo viável ser feito isso na camada de exibição.

se fosse assim a própria tag fmt:formatDate não teria seu atributo pattern correto?

Quanto ao controller, não fica viável validações desse tipo, pois trata-se de uma “camada de roteamento” se assim eu posso chamar, entendo que o que ela faz é “ver quem pede e pra quem vai o pedido”

Valeu, é isso mesmo que queria saber!

Obrigado!

Obviamente isso não quer dizer que estou certo, apenas é a forma que eu enxergo o conceito MVC.