Usando parametro passado por uma action no struts

2 respostas
I

Boa tarde amigos,

Tenho a pagina “listarFornecedor.jsp”, onde todos os nomes dos fornecedores são listados… até ai blz, na coluna nome coloquei um link onde quando clicado vai para a pagina de detalhes deste fornecedor, a minha dúvida e que não consigo fazer com que o parametro “nomeFornecedor”, chegue até ao método onde filtra estes dados…

Link:

<a href="<c:url value="/detalhesFornecedor.do?nomeFornecedor=${fornecedor.nomeFornecedor}"/>"/>${fornecedor.nomeFornecedor}</a></td>

Struts-config.xml

<action path="/detalhesFornecedor" type="br.com.sce.action.SearchAction" name="searchBean" input="/jsp/fornecedor/listarTodosFornecedores.jsp" scope="request" validate="true">
	<forward name="success" path="/jsp/fornecedor/incluirFornecedor.jsp"/>
</action>

Método que filtra os dados do fornecedor desejado através do parametro nomeFornecedor:

public BeanFornecedor selectNomeFornecedor(String nomeFornecedor) throws Exception {

		try	{
		
			String query =	"SELECT * " +
							"FROM TBL_FORNECEDOR "+
							"WHERE NOME_FORNECEDOR = '"+nomeFornecedor.trim()+"' ";
												
			xConn = new XConnection();
			xConn.rs = xConn.seleciona(query);

			BeanFornecedor fornecedor = new BeanFornecedor();

			while(xConn.rs.next()) {	
				fornecedor.setIdFornecedor(xConn.rs.getString(1));
				fornecedor.setNomeFornecedor(xConn.rs.getString(2));
				fornecedor.setRazaoSocialFornecedor(xConn.rs.getString(3));
				fornecedor.setCnpjFornecedor(xConn.rs.getString(4));
				fornecedor.setIeFornecedor(xConn.rs.getString(5));
			}
		
			xConn.fechaConexao();		
			return fornecedor;

		} catch(SQLException e) {
			System.out.println("erro selectPacienteNome: " + e.toString());
			xConn.fechaConexao();
			return null;
		} catch(Exception e) {
			System.out.println("erro selectPacienteNome: " + e.toString());
			xConn.fechaConexao();
			return null;
		}						

	}

Obrigado amigos…

2 Respostas

lmprates

Você colocando o fornecedor no request correntamente ?
Poste o código da sua action ae.

Sugestão, utilize ao invés no nome do fornecedor, o código do fornecedor para fazer o link. Ficará mais confiável para você recuperar informações do fornecedor na tela de destino deste link

I

Desculpe amigo, ontem estava meio enrolado… mas corrigi o lance do parametro e agora passo o id do fornecedor e não mas o nome…

Tenho a classe SearchAction que está da seguinte forma, a parte da linha 39 a 47 foi a que implementei para esta parte da minha dúvida.

package br.com.sce.action;

import java.util.ArrayList;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts.action.*;

import br.com.sce.fornecedor.*;
import br.com.sce.login.SearchBean;

public class SearchAction extends Action{


	public ActionForward execute(
			ActionMapping mapping, 
			ActionForm form, 
			HttpServletRequest request, 
			HttpServletResponse response) throws Exception {

		System.out.println("*** SearchAction ***");
		SearchBean sb = (SearchBean) form;
				
		DAOFornecedor daoFornecedor = new DAOFornecedor();
		BeanFornecedor beanFornecedor = new BeanFornecedor();
		ActionMessages messages = new ActionMessages();
		
		System.out.println("sb.getOpcao(): " + sb.getOpcao());
		System.out.println("sb.getidFornecedor(): " +sb.getIdFornecedor());
		
		String	idFornecedor = request.getParameter("idFornecedor");
	
		if (idFornecedor != null ) {
			System.out.println("idFornecedor != null: " + idFornecedor );
			daoFornecedor.selectFornecedor(idFornecedor);
			return mapping.findForward("success");
		}
		
		
		if (sb.getNomeFornecedor() == null || sb.getNomeFornecedor().trim().equals("")) {
			ActionMessage error = new ActionMessage("error.paciente");
			messages.add( ActionMessages.GLOBAL_MESSAGE, error );
			saveErrors(request, messages);
			return new ActionForward(mapping.getInput());
		}
		
		// Se opcao=1 Incluir 	- nao pode existir igual 	- para incluir bExist deve ser = false
		// Se opcao=2 LISTAR - tem que existir igual		- para ALTERAR bExist deve ser = true 
		// Verificar Nome no Banco
		boolean bExist = daoFornecedor.selectNomeFornecedorBoolean(sb.getNomeFornecedor());
		boolean bExistListar = daoFornecedor.pesquisaNomeFornecedorListar(sb.getNomeFornecedor());
		
		// Popular BEANS só nestes casos:
		// se for Incluir e Nao Existe no BD
		if(sb.getOpcao().equals("INCLUIR") && !bExist) {
			System.out.println("Vai Incluir e Nao Existe no BD");
			beanFornecedor.setNomeFornecedor(sb.getNomeFornecedor());
		}
 
		
		// Se for ALTERAR e Existir no BD
		//if(sb.getOpcao().equals("ALTERAR") && bExist) {
		if(sb.getNomeFornecedor() != null && bExist) {
			System.out.println("Vai ALTERAR e Existe no BD!");
			beanFornecedor = daoFornecedor.selectNomeFornecedor(sb.getNomeFornecedor());
			
		}
		
		// Lista todos nomes de fornecedores que contenha 
		if(sb.getOpcao().equals("LISTAR") && bExistListar) {
			ArrayList beanFornecedorArray = daoFornecedor.listarTodosFornecedores(sb.getNomeFornecedor());
			request.setAttribute("lFornecedor", beanFornecedorArray);
			System.out.println("Populou lFornecedor com " + beanFornecedorArray.size());
		}
		
		if(sb.getOpcao().equals("LISTAR") && !bExistListar) {
			ActionMessage error = new ActionMessage("error.nenhumRegistroEncontrado");
			messages.add( ActionMessages.GLOBAL_MESSAGE, error );
			saveErrors(request, messages);
			return new ActionForward(mapping.getInput());
		}

		// se for Incluir e Existe no BD
		if(sb.getOpcao().equals("INCLUIR") && bExist) {
			System.out.println("** Fornecedor já Cadastrado! **");
			ActionMessage error = new ActionMessage("error.inclusao");
			messages.add( ActionMessages.GLOBAL_MESSAGE, error );
			saveErrors(request, messages);	
			return new ActionForward(mapping.getInput());
			
		}
		// se for ALTERAR e Não Existe no BD
		if(sb.getOpcao().equals("ALTERAR") && !bExist) {
			System.out.println("** Fornecedor Inexistente para Alteração! **");
			ActionMessage error = new ActionMessage("error.alteracao");
			messages.add( ActionMessages.GLOBAL_MESSAGE, error );
			saveErrors(request, messages);	
			return new ActionForward(mapping.getInput());
		}

		// Põe na sessão o resultado o beanFornecedor Populado
		HttpSession session = request.getSession();
		session.setAttribute("beanFornecedor", beanFornecedor);
		session.setAttribute("opcao", sb.getOpcao());
		
		//request.setAttribute("beanFornecedor", beanFornecedor);
		//request.setAttribute("opcao", sb.getOpcao());
		return mapping.findForward("success");
		
	}

}

No Struts-config eu mudei a pagina de destino do path do forward, para detalhesFornecedor.jsp. Fiz um debug e o parametro vai até o metodo que faz o select no bd e depois ele retorna a pagina jsp detalhesFornecedor sem os detalhes deste fornecedor. Abaixo segue a pagina detalhesFornecedor.jsp para verificação. Não aparece nenhum erro, só não mostra os dados deste fornecedor no campo text do formulario.

<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

<html> 
<head>
<title>Inclusão de Fornecedores</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<form name="form1" action="valida.do" method="post">
		<table width="100%">
			<tr height="12">
			  <td align="center" valign="middle"><b>Fornecedor</b></td>
			</tr>
		</table>				  
			<br><br><br>		
		<table width="500" border="0" align="center">
			<tr>			
				<td align="center">
									<table width="100%" bgcolor="#EFF1F7" >
										<tr align="rigth" class="cx8Titulo">
											<td width="14%">Nome:</td>
											<td width="86%" colspan="3" ><c:out value="${fornecedor.nomeFornecedor}" /></td>
										</tr>	
									</table>			

									<table width="100%" bgcolor="#EFF1F7" >
										<tr align="rigth" class="cx8Titulo">
											<td width="14%">Razão Social:</td>
											<td width="52%"><c:out value="${fornecedor.razaoSocialFornecedor}" /></td>
											<td width="15%">CNPJ:</td>
											<td width="19%"><c:out value="${fornecedor.cnpjFornecedor}" /></td>
										</tr>	
									</table>
									<table width="100%" bgcolor="#EFF1F7" >
										<tr align="rigth" class="cx8Titulo">
											<td width="14%">Inscrição Estadual:</td>
											<td width="21%"><c:out value="${fornecedor.ieFornecedor}" /> </td>
											<td width="12%">Cidade :</td>
											<td width="19%"><c:out value="" /></td>
											<td width="15%">Cep :</td>
											<td width="19%"><c:out value="" /> </td>
										</tr>	
									</table>
									<table width="100%" bgcolor="#EFF1F7" >		
										<tr align="rigth" class="cx8Titulo">
											<td width="14%">Tel Resid. :</td>
											<td width="21%"> <c:out value="" /> </td>
											<td width="12%">Tel Comer. :</td>
											<td width="19%"> <c:out value="" /> </td>
											<td width="15%">Tel Celular :</td>
											<td width="19%"> <c:out value="" /> </td>
										</tr>
									</table>
									<table width="100%" bgcolor="#EFF1F7" >										
										<tr align="rigth" class="cx8Titulo">
											<td width="14%">Observa&ccedil;&atilde;o :</td>
											<td width="86%"><c:out value="" /> </td>
										</tr>														
									</table>					  
													
				</td>
			</tr>			

		</table>
		
		
		<table width="500" border="0" align="center">
			<tr>			
				<td align="center">
					<input type="submit" value="VOLTAR" onclick="return voltar();">
				</td>
			</tr>			
		</table>		
		<br> <br> <br>
		<table table width="500" border="0" align="center">
			<tr>
				<td align="center">
					<font color="red" ><c:out value="${param.mensagem}" /></font>
				</td>
			</tr>
		</table>
									
									
		</form>
	</body>
</html>

Vlw amigo.

Criado 10 de setembro de 2008
Ultima resposta 12 de set. de 2008
Respostas 2
Participantes 2