Retornar dados para o formulário com Struts

13 respostas
diogoprosoft

Galera faz 3 dias que estou quebrando a cabeça, faço o código, apago, refaço e apago, eheheh, é buxa

Preciso da ajuda de vocês, vou explicar bem para que a resposta seja realmente sobre a minha pergunta.

Estou desenvolvendo uma aplicação utilizando struts

tenho minha classes persistencia usando jdbc onde faço os códigos para me comunicar com o banco
tenho meus beans, actionForms, actions e jsp

a parte de gravar no banco está funcionando que uma blz tudo se comunicar faz a persistencia valida os dados grava no banco, tudo ok

minha duvida é a seguinte:

Antes de criar o alterar, excluir e ao invés de usar o listar eu gostaria de fazer uma consulta pelo nome do cliente e que me retorna-se os dados no mesmo formulário ai eu posso ver se vou alterar algum dado ou se vou excluir o registro, entenderam?

não estou conseguindo fazer o metodo na persistencia muito menos chamar na action vocês podem me ajundar?

minha persistencia é essa

public void localizarCliente(Cliente cliente) throws SQLException{

try {
        con = ServicePool.getConexao(JNDINome);
    }catch (Exception e){
        e.printStackTrace();
    }
    
    String sql = "SELECT * FROM clientes";
    
    try{
        
        stmt = con.prepareStatement(sql);
        stmt.executeQuery();
        
        rs.first();
        
        String igual = "n";

        int tamanho_pesquisa = cliente.getNome().length();

        while (igual == "n"){
          
            String pesquisando = rs.getString("nome").substring(0,(tamanho_pesquisa));
            
                if(pesquisando.equals(cliente.getNome())){
                    igual = "s";
            } else {
                rs.next();
         }
        cliente.setData_cadastro(rs.getDate("data_cadastro"));
        cliente.setData_nascimento(rs.getDate("data_nascimento"));
        cliente.setEndereco(rs.getString("endereco"));
        cliente.setBairro(rs.getString("bairro"));
        cliente.setCep(rs.getString("cep"));
        cliente.setCidade(rs.getString("cidade"));
        cliente.setEstado(rs.getString("estado"));
        cliente.setFone1(rs.getString("fone1"));
        cliente.setFone2(rs.getString("fone2"));
        cliente.setFone3(rs.getString("fone3"));
        cliente.setCnpj(rs.getString("cnpj"));
        cliente.setIe(rs.getString("ie"));
        cliente.setEmail(rs.getString("email"));            
     }                                                          
   }
    catch (SQLException e) {
        throw e;            
    }
    finally {                     
        desconecta();
    }        
}

minha action

public class ClienteAction extends DispatchAction{

private final static String SUCCESS = "success";    
       
public ActionForward inserir(ActionMapping mapping, ActionForm  form,
        HttpServletRequest request, HttpServletResponse response)
        throws Exception {
       
    HttpSession session = request.getSession();
    
    ClienteForm clienteForm = (ClienteForm) form;
    Cliente cliente = new Cliente();
    BeanUtils.copyProperties(cliente, clienteForm);
    
    Persistencia persistencia = new Persistencia();
    
    persistencia.insertCliente(cliente);
    
    return mapping.findForward(SUCCESS);        
            
}        

public ActionForward localizar(ActionMapping mapping, ActionForm  form,
        HttpServletRequest request, HttpServletResponse response)
        throws Exception {
    
    HttpSession session = request.getSession();
    
    ClienteForm clienteForm = (ClienteForm) form;
    Cliente cliente = new Cliente();        
    
    Persistencia persistencia = new Persistencia();
    
    persistencia.localizarCliente(cliente);
    
    
            
    return mapping.findForward("localiza");        
}

}

meu jsp

<%@page contentType=“text/html” pageEncoding=“UTF-8”%>

<%@ taglib uri=“http://struts.apache.org/tags-logic” prefix=“logic” %>
<%@ 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:html locale=“true”>



<bean:message key=“css”/>

<bean:message key=“titulo”/>

<a>html:base/</a>





<html:form action=“clienteaction” focus=“nome”>

<html:hidden property=“method” value=“inserir” />




<tr>
                <td><bean:message key="nome"/></td>
                <td><label>
                    <html:text property="nome" size="50" /><html:errors property="nome"/>
                 </label></td>
            </tr>

            <tr>
                <td><bean:message key="data_nascimento"/></td>
                <td><label>
                    <html:text property="data_nascimento" size="30" />
                 </label></td>
            </tr>   
            
            <tr>
                <td><bean:message key="endereco"/></td>
                 <td><label>
                    <html:text property="endereco" size="50" /><html:errors property="endereco"/>
                </label></td>
             </tr>

            <tr>
                 <td><bean:message key="bairro"/></td>
                <td><label>
                    <html:text property="bairro" /><html:errors property="bairro"/>
                 </label></td>
            </tr>
            
            <tr>
                <td><bean:message key="cep"/></td>
                <td><label>
                    <html:text property="cep" size="30" />
                </label></td>
            </tr>

            <tr>
                <td><bean:message key="cidade"/></td>
                <td><label>
                    <html:text property="cidade" size="30" /><html:errors property="cidade"/>
                </label></td>
            </tr>
            
            <tr>
                <td><bean:message key="estado"/></td>
                <td><label>
                    <html:text property="estado" size="5" />
                  </label></td>
            </tr>

            <tr>
                <td><bean:message key="fone1"/></td>
                <td><label>
                    <html:text property="fone1" size="30" /><html:errors property="fone1"/>
                </label></td>
            </tr>
    
            <tr>
                <td><bean:message key="fone2"/></td>
                <td><label>
                    <html:text property="fone2" size="30" />
                </label></td>
            </tr>
            
            <tr>
                <td><bean:message key="fone3"/></td>
                <td><label>
                    <html:text property="fone3" size="30" />
                  </label></td>
            </tr>

            <tr>
                <td><bean:message key="cnpj"/></td>
                <td><label>
                    <html:text property="cnpj" size="30" />
                </label></td>
            </tr>

            <tr>
                <td><bean:message key="ie"/></td>
                <td><label>
                    <html:text property="ie" size="30" />
                </label></td>
            </tr>

            <tr>
                <td><bean:message key="email"/></td>
                <td><label>
                    <html:text property="email" size="50" />
                     </label></td>
            </tr>

            <tr>
                <td><label>
                        <html:submit><bean:message key="gravar"/></html:submit>  
                        <html:link action="/clienteaction?method=localizar">Localizar</html:link>
                </label></td>
            </tr>
     </table>
    </html:form>
</body>

</html:html>

e ai o que posso fazer?

<bean:message key=“data_cadastro”/>
<html:text property=“data_cadastro” size=“30” />

13 Respostas

e-cowboy

Ve se resolve!

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

HttpSession session = request.getSession(); 

ClienteForm clienteForm = (ClienteForm) form; 
Cliente cliente = new Cliente(); 
BeanUtils.copyProperties(cliente, clienteForm); 

Persistencia persistencia = new Persistencia(); 

//mudar aqui!
persistencia.localizarCliente(cliente); 

BeanUtils.copyProperties(clienteForm,cliente); 

//este retorno deve ser para o mesmo jsp de cadastro!
return mapping.findForward("localiza"); 
} 

}

jsp

//mude o input do method coloque o id
<html:hidden property="method" value="inserir" styleId="method"/> 

//mude o link de locazilar para o seguinte
<html:submit onClick="document.getElementById('method').value='lozalizar';">Localizar</html:submit>

Testa isso ve se dá uma clareada!

diogoprosoft

não deu, mais pelo menos deu um erro

javax.servlet.ServletException: BeanUtils.populate

org.apache.struts.util.RequestUtils.populate(RequestUtils.java:495)

org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:816)

org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:203)

org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)

org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)

javax.servlet.http.HttpServlet.service(HttpServlet.java:710)

javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:368)

root cause

org.apache.commons.beanutils.ConversionException

org.apache.commons.beanutils.converters.SqlDateConverter.convert(SqlDateConverter.java:117)

org.apache.commons.beanutils.ConvertUtilsBean.convert(ConvertUtilsBean.java:428)

org.apache.commons.beanutils.BeanUtilsBean.setProperty(BeanUtilsBean.java:1004)

org.apache.commons.beanutils.BeanUtilsBean.populate(BeanUtilsBean.java:811)

org.apache.commons.beanutils.BeanUtils.populate(BeanUtils.java:298)

org.apache.struts.util.RequestUtils.populate(RequestUtils.java:493)

org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:816)

org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:203)

org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)

org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)

javax.servlet.http.HttpServlet.service(HttpServlet.java:710)

javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:368)
e-cowboy

É que acontece o seguinte, na sua persistência você utiliza rs.getDate este método retorna um java.sql.Date e provavelmente no seu form você tem os métodos setData_Cadastro e setData_Nascimento recebendo como parâmetro o tipo java.util.Date ai vai dar erro, as duas classes Cliente e Form tem que ter os mesmos tipo de dados, mude tudo para java.sql.Date ou para java.util.Date
Verifique se não é isso!

diogoprosoft

não em todos eu estou usando java.sql.Date

essa meu localizar na persistecia esta certo?

e-cowboy

Na verdade não, porque você não tem cláusula where no seu select deveria ter um select * from xyz where nome=nomedocliente, e também seria interessante se ele retornasse um objeto do tipo Cliente ao invés de retornar void, mas para testar acredito que dê!

Tem que dar uma olhada nos gets e sets da vida ai, se não tem algum objeto nulo coisas do tipo, os gets do Cliente tem que bater com os Sets do ClienteForm e vice-versa!!!
Faz um debug, ou aquele velho e bom System.out para testar ai hehehe

diogoprosoft

vejam como ficou agora minha persistencia acho que ficou melhor se visualizar

public void localizarCliente(Cliente cliente) throws SQLException{

try {
        con = ServicePool.getConexao(JNDINome);
    }catch (Exception e){
        e.printStackTrace();
    }
    
    String sql = "SELECT * FROM clientes WHERE nome LIKE '% ? %'";        
    
    try{
        
        stmt = con.prepareStatement(sql);
        
        stmt.setObject(1, cliente.getNome());                        
        
        while(rs.next()){
            cliente.setData_cadastro(rs.getDate("data_cadastro"));
            cliente.setData_nascimento(rs.getDate("data_nascimento"));
            cliente.setEndereco(rs.getString("endereco"));
            cliente.setBairro(rs.getString("bairro"));
            cliente.setCep(rs.getString("cep"));
            cliente.setCidade(rs.getString("cidade"));
            cliente.setEstado(rs.getString("estado"));
            cliente.setFone1(rs.getString("fone1"));
            cliente.setFone2(rs.getString("fone2"));
            cliente.setFone3(rs.getString("fone3"));
            cliente.setCnpj(rs.getString("cnpj"));
            cliente.setIe(rs.getString("ie"));
            cliente.setEmail(rs.getString("email"));
            
            rs = stmt.executeQuery();
        }
 }                                                                 
    catch (SQLException e) {
        throw e;            
    }
    finally {                     
        desconecta();
    }        
}

mais ainda nao funcionou

vcs nunca fizeram algo parecido com que estou pedindo?

diogoprosoft

erro não está dando, mais quando eu digito o nome os as iniciais e clico em Localizar somente limpa o formulário!!!

diogoprosoft

acho que esta faltando enviar os dados para o formulario como posso fazer isso?

e-cowboy

é só setar os atributos do ClienteForm!

diogoprosoft

pô pessoal vamos ser mais claros!!!

como posso fazer isso, creio que é só o que está faltando!!!

alves.Felipe

Ola…

Vc ja tentoru fazer o que o e-cowboy falou???

vc sabe se os dados que vc digita na tela esta chegando no seu action? ou na sua persistencia?

Não sei se viu, mas ainda seu método continua retornando void, e o rs = stmt.executeQuery(); tem que ser declarado antes do while(rs.next())…
e no seu action receber o retorno da consulta…

ele limpa pq deve estar chegando no action e fazendo alguma coisa…

diogoprosoft

eu vou tentar mais algumas mudanças para ver se consigo fazer funcionar, valeu pessoal :frowning:

Kamikaze
na action Localizar o seu codigo:
public ActionForward localizar(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {

HttpSession session = request.getSession();

ClienteForm clienteForm = (ClienteForm) form;
Cliente cliente = new Cliente();

Persistencia persistencia = new Persistencia();

persistencia.localizarCliente(cliente);



return mapping.findForward("localiza");
}

}
em
persistencia.localizarCliente(cliente);
toque o cliente por clienteForm ficando
persistencia.localizarCliente(clienteForm);
Criado 21 de maio de 2008
Ultima resposta 21 de mai. de 2008
Respostas 13
Participantes 4