Dúvida JSP - FJ-21

11 respostas
douglaskd

por favor alguém pode me ajudar, estou com dúvidas nos exercícios da página 95 da FJ-21

Exercicio: Coloque um link na sua lista-contatos-elegante.jsp que abre a página testa-altera-mvc.jsp passando
o Id do contato que você quer alterar. Deixe o campo Id visível no form mas não alterável. Não esqueça de
passar o campo Id pela requisição. Faça com que os campos do form estejam populados com os dados do
contato a ser editado.

abaixo o link que criei na página lista-contatos-elegante.jsp:

<td><a href="testa-altera-contato.jsp?id=${contato.id}">Alterar</a></td>

aqui é a parte onde ele recebe o id como parâmetro:

<form action="mvc" method="POST"> Id: <input type="text" value=${param.id} "readonly"> <br /> Nome: <input type="text" value=${param.nome}> <br /> E-mail: <input type="text" value=${param.email}><br /> </form>

como eu passo somente o id como parâmetro… no campo nome e email não aparece nada

o correto é eu passar os outros valores por parâmetro ou procurar o contato no banco através do método getById, como eu faço isso?

agradeço antecipadamente.

11 Respostas

Elizeu_Santos

rsrs mais um com problemas com apostilas caelum… to até com medo de fazer o curso!

oddy.silva

na servlet Seria assim:

String parametro = request.getParameter("id");
Long id = 0;
if(parametro != null && !parametro.isEmpty(){
 try{
 id = Long.parseLong(parametro);
 } catch(NumberFormatException e){
 }

}

pra enviar, não sei se é isso que você quer, mas pra enviar o id de um link, é assim:

<a href="nomeDaServlet?meuParametro=${param.id}"> Clica! </a>

ou 

<a href="pagina.html?meuParametro=${param.id}"> Clica! </a>
oddy.silva

Só mais uma coisa. Se você quer receber o valor de um componente de um form, você dá um nome pra ele e depois recebe o valor dele no post.
Exemplo:

<!--o form-->
<form>
Id: <input type="text" value=${param.id} name="campoId" "readonly"> <br />   
</form>

//a Servlet q recebe a bagaça, no método do Post
String campoId = request.getParameter("campoId");

//daí daqui em diante é com você.

Acho que é isso. Mas olha só, tem tudo isso na apostila. Eu posso dizer isso porque li a FJ21 inteira =]

Abrass

douglaskd

bom minha dúvida é a seguinte, eu preciso criar uma outra lógica na pasta MVC? se eu criar essa lógica como eu chamo ela no link

aqui por exemplo eu to passando o id como parametro e recebe la na outra página normal.

<td><a href="testa-altera-contato.jsp?id=${contato.id}">Alterar</a></td>

e aqui aparece o id normal:

Id: <input type="text" value=${param.id} "readonly"> <br />

agora como eu faço aparecer o nome e email do contato, sem que sejam passados por parâmetro?

la no topo onde eu chamo a página teste-altera-contato.jsp, o correto seria eu chamar o servlet e mandar um requestDispatcher para teste-altera-contato.jsp? essa é a forma correta?

agradeço desde ja

oddy.silva

Pra você exibir um parâmetro, sem ter que setá-lo em algum form, é só setar o parâmetro no
seu controler. Por exemplo, vamos supor que você buscou o email de um cliente e precisa exibir este email
numa página. Seria mais ou menos assim:

A Servlet:

public void doGet(HttpRequest req, HttpResponse res){
		
		Email email = new Email();
		String enderecoEmail = email.getEndereco();
		request.setAtribute("enderecoEmail", enderecoEmail);

		... blá blá blás
		

	}

//No JSP:

<c:set var="${enderecoEmail}" property="*" scope="request"/>

O Email do cliente é ${enderecoEmail}

Neste exemplo, na verdade, eu passei o email como atributo, e não como parâmetro. Mas é basicamente isso.

kirill

Eu resolvi este problema da seguinte maneira:
Na página lista-contatos-elegante.jsp
adicionei um link na tabela:

<td><a href="mvc?logica=AlteraContatoLinkLogic&id=${contato.id}">Alterar</a></td>

Onde eu chamo uma Classe AlteraContatoLinkLogic que implementa aquela interface Logica anterior e é controlada
por uma Servlet ControllerServlet que foi ja foi implementada.

Esta classe AlteraContatoLinkLogic se parece com isto:

package mvc.logica;

import databaseconectivity.ContatoBean;
import databaseconectivity.ContatoDAO;
import javax.servlet.RequestDispatcher;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import mvc.Logica;


public class AlteraContatoLinkLogic implements Logica{

    public void executa(HttpServletRequest req, HttpServletResponse res) throws Exception {
        Long id = Long.parseLong(req.getParameter("id"));
        ContatoDAO contatoDao = new ContatoDAO();
        ContatoBean contato = contatoDao.pesquisar(id);
        req.setAttribute("nome", contato.getNome());
        req.setAttribute("email", contato.getEmail());
        req.setAttribute("endereco", contato.getEndereco());
        req.setAttribute("nascimento", contato.getDataNascimento());

        RequestDispatcher rd = req.getRequestDispatcher("testa-altera-mvc.jsp");
        rd.forward(req, res);
    }

}

Perceba que no final estou redirecionando para a tal página testa-altera-mvc.jsp, so que na requisicao desta vez
estao todos os dados necessarios como nome,email,endereco,etc…

E a página testa-altera-mvc.jsp se parece com isso:

<%-- 
    Document   : testa-altera-mvc
    Created on : 28/03/2011, 09:14:48
    Author     : Not of your business
--%>

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<c:import url="cabecalho.jsp"/>

<form action="mvc" method="POST">
    Id: <input  type="text" name="id" value="${param.id}" readonly/><br/>
    Nome: <input type="text" name="nome" value="${requestScope.nome}"/><br/>
    E-mail: <input type="text" name="email" value="${requestScope.email}"/><br/>
    Endereço: <input type="text" name="endereco" value="${requestScope.endereco}"/><br/>
    Data de nascimento: <input type="text" name="nascimento" value="${requestScope.nascimento}"/><br/>
    <input type="hidden" name="logica" value="AlteraContatoLogic"/>
    <input type="submit" value="Salvar"/>
</form>

<c:import url="rodape.jsp"/>

Funcionou assim para mim, abraços e boa sorte

nel

Onde encontra-se o problema na Apostila?
E mesmo que tenha, não esqueça que qualquer apostila, livro, artigo entre outros podem vir a ter falhas, mas isso não implica diretamente na qualidade do curso.

Até porque, no geral, eu considero de ótima qualidade as apostilas deles.
Abraços.

douglaskd

vou testar kirill obrigado

I

Tambem estou com problemas nesse exercicio,

Eu estava querendo passar dessa maneira, ao lado de cada linha na pagina lista-contatos-elegante.jsp, teria 1 botao alterar…
esse botão mandaria para a página testa-altera-contato.jsp o parametro do ID, aonde esse campo não pode ser alterado…
Ou seja, e lá ja ficar fixo esse valor para o ID, e o usuario modificaria os demais…

Não consegui implementar, e estou tendo dificuldades com isso se alguem entendeu e puder me dar uma luz ficaria muito agradecido!

D

Eh…
tambem estou tendo dificuldade, e para complicar estou tentando usar o recurso da displaytag.

<display:table  name="${dao.lista}">

  <display:column property="id" title="ID" />
  <display:column property="nome" />
  <display:column property="endereco" />
  <display:column  autolink="true" property="email" />
  <display:column  property="dataNascimento"  title="Data de Nascimento"  />
  <display:column  href="/testa-altera-mvc.jsp" paramName="id" paramProperty="id" value="Altera" title="Ações" />
  
  
</display:table>

Acredito que tenha de consultar no banco para popular o formulario da pagina testa-altera-mvc.jsp onde aponta o link

A

Consegui com essa dica do Kirill

Criado 17 de fevereiro de 2011
Ultima resposta 11 de jan. de 2013
Respostas 11
Participantes 8