O que voce nao gosta, isso? id=${contato.id}&nome=${contato.nome}&outrosatributos=${expressao}…
Ou especificamente isso? data=<fmt:formatDate value="${contato.dataNascimento.time}" pattern=“dd/MM/yyyy” />
Ou as duas coisas…?
Do primeiro não dá para fugir muito não - a não ser em um framework orientado a componentes em que não precise escrever o HTML dos links, mas não é o caso, não vamos mudar a arquitetura por causa desse detalhe!
E sobre o segundo item, que é uma tag dentro do atributo: também não me agrada fazer desse jeito, e há uma solução. A maioria das tags de formatação de dados possui a opção de armazenar o valor em uma variável, que pode ser usada em seguida como uma expressão.
Ficaria assim:<fmt:formatDate value="${contato.dataNascimento.time}" pattern="dd/MM/yyyy" var="dataFormatadaLink" />
<a href=testa-altera-mvc.jsp?id=${contato.id}&nome=${contato.nome}&email=${contato.email}&data=${dataFormatadaLink}&endereco=${contato.endereco}...
E mais uma coisa que pode ser considerada nesse caso específico: existe a opção de passar apenas o ID no link, e na página de alteração fazer uma nova pesquisa no banco para trazer os detalhes. Essa solução tem a vantagem de garantir melhor a consistência dos dados na alteração (além de melhorar bastante a aparência do link…), mas a desvantagem de precisar de uma nova consulta. Analise os prós e contras e veja o que é melhor para você!
Bom, vou dizer porque vc está aprendendo e o melhor é ir mesmo com uma coisa de cada vez, mas prometa que vai estudar MVC antes de qualquer projeto real!
No início da testa-altera-mvc.jsp coloque um scriptlet para fazer a pesquisa, aí guarde o resultado em um atributo do request e pode usar normal no restante da página. Mais ou menos assim:
<%
String idParam = request.getParameter("id");
int id = Integer.parseInt(idParam); // Aqui supondo que o tipo é int. Use o mais apropriado para seu caso
// E também coloque um tratamento de erro para o caso de o valor ser invalido
Contato contato = new ContatoDao().pesquisarContato(id); // Supondo que ContatoDao.pesquisarContato é a classe responsável pela consulta no banco
request.setAttribute("contato", contato);
%>
Form:
Id: <input type="text" name="id" value="${contato.id}"/><br />
Nome: <input type="text" name="nome" value="${contato.nome }" /><br />
E-mail: <input type="text" name="email" value="${contato.email}" /><br />
-- e assim por diante
valeu gamesrod! achei que era isso mesmo, mas aqui na apostila “condenam” o uso de scriplets…
vou dar uma olhada sim no MVC, mas tu quis dizer mais especificamente Struts 2, Hibernate, etc?
abraço!
E condenam com razão… O código fica uma bagunça, e um sistema feito desse jeito tende a virar um “monstro” à medida que é desenvolvido e recebe novas funcionalidades.
Como eu já disse, só expliquei desse jeito para que vc possa aprender um passo de cada vez, mas nem pense em usar em um projeto real! :?
Com o MVC as responsabilidades ficam distribuídas, a parte de visão (JSP) separada da lógica de navegação e tratamento das requisições, e ambas separadas da lógica de regras de negócio. Bem melhor…
O padrão MVC pode ser implementado apenas com Servlets ou utilizando frameworks (Struts, SpringMVC, VRaptor, entre outros). Eu recomendaria primeiro aprender só com servlets pois isso lhe dará uma boa base para entender qualquer framework.
Obs: sobre o Hibernate, ele não tem nenhum papel no MVC (trata da camada de persistência/banco de dados) embora geralmente sejam usados em conjunto.