Passar parametro de um jsp para outro usando jstl[RESOLVIDO]

18 respostas
T

Olá pessoal, to apanhando aqui num projeto, to acostumado com jsf, dai cai em jsp + servlet, bom deixa eu expor meu problema:

Tenho o seguinte jsp de listagem:

<jsp:useBean id="visualizarAreaFuncional" class="br.com.netsolar.controle.ControleAreaFuncionalVisualizar"></jsp:useBean>
				<table>
					<tr>
						<td>AF_CD</td>
						<td>AF_DESC</td>
					</tr>
					<c:forEach var="af" items="${visualizarAreaFuncional.objetos}">
						<tr>
							<td>${af.codigo}</td>
							<td>${af.descricao }</td>
							<td><a href='AreaFuncionalManter?acao=EXCLUIR&codigo=${af.codigo}'>Deletar</a></td>
							<td><a href='alterarAreaFuncional.jsp?codigo=${af.codigo}'>Alterar</a></td>
						</tr>
					</c:forEach>
				</table>

A parte de exclusão esta blz, acontece que no metodo alterar eu preciso passar esse parametro codigo para o outro jsp de edicao, la queria pegar esse codigo e chamar um servlet que buscaria meu objeto e setaria os dados. Como faço isso usando a jstl?

O que eu não quero é usar scriptlet nos meus jsp, to adotando jstl e acho q vou usar displaytag também.

Toda a ajuda será bem vinda!

18 Respostas

W

não entendi muito bem.

você quer saber como pegar o parametro “codigo” no “alterarAreaFuncional.jsp”?

R

Simples,
Ao invés de fazer o link para o JSP, faça o link para um Servlet.

E lá vc recupera o parâmetro, faz o que tiver que fazer e por fim faz um forward para o JSP.

Procure dar uma lida sobre MVC.

Flw.

T

blz, eu chamo um servlet da pag. de listagem dai la eu pego o codigo, e busco o meu objeto, até ai blz, dai do meu servlet eu vou redirecionar para o meu jsp de alteração, mas como eu faço pra setar esse meu objeto no request e depois recuperar ele na pagina sem usar scriptlet?

T

wbdsjunior, na verdade o que rafagil falou seria legal, pois posso chamar meu servlet, buscar o objeto que preciso, até ai blz, o q eu não sei é como eu vou recuperar as informações na minha jsp de edição, la no meu servlet o que eu preciso setar e como eu busco depois isso no meu jsp, essa é minha duvida agora.

Sei q deve ser algo basico, mas como disse não tenho conhecimento de servlet e jsp, estou tentando adotar bibliotecas como jst e displaytag, para fazer o melhor possivel, nao quero usar scriptlet nas minhas jsp.

Grato pela ajuda!

R

Simples tbm,

usa o método request.setAttribute(“nome”, objeto) no servlet.

daí ele fica disponível pra vc usar no seu jsp.

Qq dúvida, falae.

W

que informações você quer recuperar na jsp?

se for um parametro use…

response.sendRedirect("novaURL");

no servlet, para chamar a jsp ou outro servlet

e…

${param.codigo}

na jsp, para pegar um parametro.

se for um objeto, coloque na sessão ou faça a consulta ao bando de dados de novo.

recomendo ler o capitulo 7 da apostila da caelum.

R

Vou colocar exemplos de código pra ver se fica mais claro:

No Servlet:

protected void doGet(HttpServletRequest request, HttpServletResponse response)  throws ServletException, IOException {
    request.setAttribute("nome", "Rafael");
    getServletConfig().getServletContext().getRequestDispatcher("/index.jsp").forward(request,response);
}

E no JSP:

<body>       
        <h3>Meu nome é ${nome}</h3>
</body>

Acho qeu ficou mais claro agora.

V

Aquela da apotila da Caelum que foi recomendada é realmente muito boa. Eu aprendi tudo sobre JSP, MVS, Struts e o basico de Hibernate la.

Tambem recomendo você dar um lida. Pricipalmente para aprender Struts. Facilitaria bastante oque esta tentando fazer.

Abss

Att,

Vinicius Roberto

T

amigos, obrigado por toda a ajuda, com o q vcs falaram funcionou legal, so não estou entendo pq esta preenchendo apenas um dos meus campos, vou postar os codigos.

meu jsp de listagem:

<jsp:useBean id="visualizarAreaFuncional" class="br.com.netsolar.controle.ControleAreaFuncionalVisualizar"></jsp:useBean>
<table>
	<tr>
	        <td>AF_CD</td>
		<td>AF_DESC</td>
	</tr>
	<c:forEach var="af" items="${visualizarAreaFuncional.objetos}">
	        <tr>
	               <td>${af.codigo}</td>
		       <td>${af.descricao}</td>
		       <td><a href='AreaFuncionalManter?acao=EXCLUIR&codigo=${af.codigo}'>Deletar</a></td>
		       <td><a href='AreaFuncionalManter?acao=BUSCAR&codigo=${af.codigo}'>Alterar</a></td>
	        </tr>
	</c:forEach>
</table>

bom, nessa listagem tenho os campos de excluir e alterar que passo para o meu servlet a ação que será efetuada e o codigo do objeto, meu servlet:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	doService(request, response);
}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	doService(request, response);
}

private void doService(HttpServletRequest request, HttpServletResponse response) {
	try {
		String acao = request.getParameter("acao");
					
		if(acao.equals(AcaoServlet.ALTERAR.name())){
				
		} else if(acao.equals(AcaoServlet.BUSCAR.name())){
			String cd = (String) request.getParameter("codigo");
			AreaFuncional af = ControleModelo.areaFuncionalBuscar(cd);
				
			request.setAttribute("codigo", af.getCodigo());
			request.setAttribute("descricao", af.getDescricao());
				
			RequestDispatcher dispatcher = request.getRequestDispatcher("alterarAreaFuncional.jsp");
			
			System.out.println("Desc. " + request.getAttribute("descricao") ) ;
			System.out.println("Cod. " + request.getAttribute("codigo"));
		
			dispatcher.forward(request, response);
		} else if(acao.equals(AcaoServlet.EXCLUIR.name())){

		} else if(acao.equals(AcaoServlet.INCLUIR.name())){

		} else if(acao.equals(AcaoServlet.LISTAR.name())){
			
		}
	} catch (Exception e) {
		e.printStackTrace();
	}
}

terei o codigo das outras ações só pra deixar mais legivel, mas ele ta fazendo td, na listagem ta excluindo, e no System.out.println que to dando ele imprime os valores corretos, mas no meu jsp de edição ele não mostra, meu jsp de edição:

<form action="AreaFuncionalManter" method="post">
	<input type="hidden" name="acao" value="ALTERAR"></input> 
	<fieldset>
		<label>
			<span>Código da Área Funcional</span><small><img src="gfx/ico_wrong.gif" alt="Erro!" /> <span>Login Incorreto</span></small><br/>
			<input type="text" name="codigo" maxlength="18" value="${param.codigo}"/>
		</label>
		<label>
			<span>Descrição da Área Funcional</span><small><img src="gfx/ico_wrong.gif" alt="Erro!" /> <span>Login Incorreto</span></small><br />
			<input type="text" name="descricao" value="${param.descricao}"/>
		</label>
		<div class="buttons">
			<a href="listar.jsp" title="Cancelar"><img src="gfx/bt_cancelar.gif" alt="Cancelar" /></a>
			<input type="image" src="gfx/bt_confirmar.gif" alt="Confirmar" value="Submit" />
		</div>
	</fieldset>
</form>

Ele carrega o campo de codigo corretamente mas o input de descrição fica em branco, qual sera o motivo? Não da erro e imprime no console o valor correto da descrição só não atualiza a jsp.

Obrigado a todos pela paciencia e ajuda!

R

O erro está no ${param.codigo} e ${param.descricao}

O correto é usar apenas ${codigo} e ${descricao}, que são os nomes que você colocou nos attributes :wink:

Tentaí

R

o ${param.nomevar} é usado para recuperar parametros GET ou POST (veja que no objeto request vc tem os métodos getParameter e getAttribute)

Parâmetros são diferentes de atributos.

T

rafagil, tentei da forma q vc falou, mas dai não imprime nada em nenhum dos campos, com o ${param.codigo} e ${param.descricao} está exibindo ao menos o codigo no campo certo, o que pode ser cara, to aqui estudando essa apostila da caelum, muito boa ela!

Obrigado pela ajuda!

R

Bem, o código está aparecendo porque o seu link manda o codigo como parametro (a variavel tem o mesmo nome), daí, ele vai aparecer mesmo.

Faz o seguinte, tenta mudar o seu forward para ser feito da seguinte maneira:

getServletConfig().getServletContext().getRequestDispatcher("alterarAreaFuncional.jsp").forward(request,response);

pq daí o dispatcher é do servletContext, e não do request.

R

Ah, e não use o “param”

T

rafagil, não sei o q pode estar acontecendo cara, desse jeito não imprime nada em nenhum campo.
Vo continuar estudando aqui, se vc lembrar de mais alguma coisa que possa ser eu agradeço.
Se eu achar o meu erro eu posto aqui!

Obrigado cara!

T

rafagil vc não vai acreditar cara, ja ñ sabia mais o q tentar, dei um boot na maquina e depois a pagina passou a funcionar perfeitamente com o jeito q vc havia me passado, sem usar “param”!

Cara, muito obrigado!

Me desculpe pelas perguntinhas bobas, mas como disse não tenho experiencia com jsp e servlet, mas este é um assunto q vai me render bons meses de estudo a partir de hj!

Abraço!

R

rsrsrs, esquenta não.

Provavelmente era cache, jah perdi uma manhã inteira de serviço por causa do cache do tomcat, rsrsrs.

Mas pelo menos funcionou neh?

Flws.

T

Vivendo e aprendendo né, mas funcionou perfeitamente cara!
Muito obrigado rafagil!

Abraço!

Criado 18 de junho de 2009
Ultima resposta 18 de jun. de 2009
Respostas 18
Participantes 4