Fazendo Relatório de Cliente - não mostra dados PFisica ou PJuridica [RESOLVIDO]

6 respostas
M

Boa noite

Pessoal estou com um problema..
Meu sisteminha tem Cliente (classe pai) e PessoaFisica e PessoaJuridica que herda de cliente.

meu controlador esta assim:

public class ClienteCTR extends HttpServlet {

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {

        Cliente cli = new Cliente();
        PessoaFisica pf = new PessoaFisica();
        PessoaJuridica pj = new PessoaJuridica();
        ClienteDAO daoC = new ClienteDAO();


        cli.setCodigo(Integer.parseInt(request.getParameter("codigo").toUpperCase()));
        cli.setNome(request.getParameter("nome").toUpperCase());
        cli.setRua(request.getParameter("rua").toUpperCase());
        cli.setNumero(request.getParameter("numero"));
        cli.setCep(request.getParameter("cep"));
        cli.setBairro(request.getParameter("bairro").toUpperCase());
        cli.setCidade(request.getParameter("cidade").toUpperCase());
        cli.setEstado(request.getParameter("estado"));
        cli.setPais(request.getParameter("pais").toUpperCase());
        cli.setTelefone(request.getParameter("telefone"));
       
      


        //testando para passar as informações para a tela.
        String tipo = request.getParameter("tipo");
        if(tipo.equals("pFisica")){
		pf = new PessoaFisica(cli);
			// recupera os dados de fisico
		pf.setRg(request.getParameter("rg"));
		pf.setCpf(request.getParameter("cpf"));
                DateFormat fmtData = new SimpleDateFormat("dd/MM/yyyy");
                String data = request.getParameter("dataNascimento");
                     try {
                pf.setDataNascimento(new Date(fmtData.parse(data).getTime()));
                        } catch (ParseException e) {
                    e.printStackTrace();
                    }
		pf.setSexo(request.getParameter("sexo"));
                //salvar no banco
               daoC.salvar(pf);
        }

        
        /*
        pf.setRg(request.getParameter("rg").toUpperCase());
        pf.setCpf(request.getParameter("cpf").toUpperCase());
        pf.setSexo(request.getParameter("sexo").toUpperCase());
         */



        if(tipo.equals("Pjuridica")){
		pj = new PessoaJuridica(cli);
		pj.setCnpj(request.getParameter("cnpj"));
		pj.setInscricaoEstadual(request.getParameter("inscricaoEstadual"));
                //salvar no banco
               daoC.salvar(pj);
            }

       
/*
        pj.setCnpj(request.getParameter("cnpj"));
        pj.setInscricaoEstadual(request.getParameter("inscricaoEstadual"));
*/

      //   daoC.salvar(cli);
        
        response.setCharacterEncoding("ISO-8859-1");
        request.setAttribute("cliente", cli);
        request.setAttribute("pessoaJuridica", pj);
        request.setAttribute("pessoaFisica", pf);
        RequestDispatcher visao = request.getRequestDispatcher("respCliente.jsp");
        visao.forward(request, response);



    } 

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** 
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    } 

    /** 
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

}
a minha pagina de relatório relCliente.jsp, esta da seguinte forma:
Nome:<input type="text" name="valorPesquisa" />
            <button type="submit">Pesquisar</button>
        </form>
        <p/>
	<table>
            <tr>
                <th>Código</th>
                <th>Nome</th>
                <th>Rua</th>
                <th>Numero</th>
                <th>CEP</th>
                <th>Bairro</th>
                <th>Cidade</th>
                <th>Estado</th>
                <th>Pais</th>
                <th>Telefone</th>
                <th>RG</th>
                <th>CPF</th>
                <th>Sexo</th>
                <th>Data Nascimento</th>
                <th>CNPJ</th>
                <th>Ins. Estadual</th>
            </tr>
            <%
                List<Cliente> listaCliente =(List<Cliente>)
                                        request.getAttribute("listaCliente");
                for(Cliente cli: listaCliente){
             %>
             <%
                List<PessoaFisica> listaPF =(List<PessoaFisica>)
                                        request.getAttribute("listaPF");
                for(PessoaFisica pf: listaPF){
             %>
                          <%
                List<PessoaJuridica> listaPJ =(List<PessoaJuridica>)
                                        request.getAttribute("listaPJ");
                for(PessoaJuridica pj: listaPJ){
             %>
            <tr>
                <td><%=cli.getCodigo()%></td>
                <td><%=cli.getNome() %></td>
                <td><%=cli.getRua() %></td>
                <td><%=cli.getNumero() %></td>
                <td><%=cli.getCep() %></td>
                <td><%=cli.getBairro() %></td>
                <td><%=cli.getCidade() %></td>
                <td><%=cli.getEstado() %></td>
                <td><%=cli.getPais() %></td>
                <td><%=cli.getTelefone() %></td>
                <td><%=pf.getRg() %></td>
                <td><%=pf.getCpf() %></td>
                <td><%=pf.getSexo() %></td>
                <td><%=pf.getDataNascimento() %></td>
                <td><%=pj.getCnpj() %></td>
                <td><%=pj.getInscricaoEstadual() %></td>


                
            </tr>
            <%
                }
            %>
	</table>
	</div>
        <jsp:include page="libs/rodape.jsp"></jsp:include>
</div>
</body>
</html>

Se eu tirar as lista de PF e PJ. O relatório sai com os dados de CLIENTE, os dados caso for PFisica ou Pjuridica.

como fazer o relatorio mostrar os dados completo???

Pode ser com expressão de linguagem também...

obrigado

6 Respostas

M

ALGUEM PODE ME AJUDAR??

Ainda nao consegui resolver este problema para mostrar os dados no relatório.

fbahia32

macavieira:
Se eu tirar as lista de PF e PJ. O relatório sai com os dados de CLIENTE, os dados caso for PFisica ou Pjuridica.

como fazer o relatorio mostrar os dados completo??? .

Não entendi direito o que vc deseja… tem como vc formular novamente a sua pergunta para que eu possa tentar te ajudar?

fbahia32
macavieira:
ALGUEM PODE ME AJUDAR??

Ainda nao consegui resolver este problema para mostrar os dados no relatório.

vc tem que recuperar os objetos do seu controlador.

vc fez assim no seu controlador:

request.setAttribute("cliente", cli);  
request.setAttribute("pessoaJuridica", pj);  
request.setAttribute("pessoaFisica", pf);

na sua pagina jsp, vc tem q recupera-los com o request.getAttribute.

no lugar de:
<%  
                List<Cliente> listaCliente =(List<Cliente>)  
                                        request.getAttribute("listaCliente");  
                for(Cliente cli: listaCliente){  
             %>  
             <%  
                List<PessoaFisica> listaPF =(List<PessoaFisica>)  
                                        request.getAttribute("listaPF");  
                for(PessoaFisica pf: listaPF){  
             %>  
                          <%  
                List<PessoaJuridica> listaPJ =(List<PessoaJuridica>)  
                                        request.getAttribute("listaPJ");  
                for(PessoaJuridica pj: listaPJ){  
             %>

coloque:

<%  
                List<Cliente> listaCliente =(List<Cliente>)  
                                        request.getAttribute("cliente");  
                for(Cliente cli: listaCliente){  
             %>  
             <%  
                List<PessoaFisica> listaPF =(List<PessoaFisica>)  
                                        request.getAttribute("pessoaFisica");  
                for(PessoaFisica pf: listaPF){  
             %>  
                          <%  
                List<PessoaJuridica> listaPJ =(List<PessoaJuridica>)  
                                        request.getAttribute("pessoaJuridica");  
                for(PessoaJuridica pj: listaPJ){  
             %>

não entendi muito sua duvida, ve se isso te ajuda.

M

Bem meu Controlador esta mandando as informações assim:

request.setAttribute("cliente", cli);
        request.setAttribute("pessoaJuridica", pj);
        request.setAttribute("pessoaFisica", pf);
        RequestDispatcher visao = request.getRequestDispatcher("respCliente.jsp");

Agora no meu relatório não estou misturando java com o HTML e mudei para Linguagem de Expressão e esta assim:

<c:forEach var="cliente" items="${listaCliente}">
          
            <tr>
                <td><a href="cliente.do?codigo=${cliente.codigo}"><img border="0" src="/imagens/editar.gif"></a></td>
                <td><a href="cliente.do?codigo=${cliente.codigo}&acao=del"> <img border="0" src="/imagens/excluir.gif"></a></td>
                <td>${cliente.codigo}</td>
                <td>${cliente.nome}</td>
                <td>${cliente.rua}</td>
                <td>${cliente.numero}</td>
                <td>${cliente.cep}</td>
                <td>${cliente.bairro}</td>
                <td>${cliente.cidade}</td>
                <td>${cliente.estado}</td>
                <td>${cliente.pais}</td>
                <td>${cliente.telefone}</td>
            </tr>
         </c:forEach>

até aqui esta tudo perfeito. O problema é que todo cliente ou e uma PessoaFisica ou uma Pessoa juridica, e na hora que eu chamo um desses da pal e nao mostra o relatorio com as demais informações de cliente.

Estou querendo saber o que tenho que fazer para mostar as informações do cliente completo.

tenho que fazer um IF pra comprar os 2? Como eu fiz no Controlador para gravar no banco? Ae no caso ficaria mais ou menos assim:

<c:choose>
											<c:when test="${tipoP == 'INQUILINO'}">
											
											<span class="corLetraNegrito" id="rendaInqui">RENDA:</span><br/>
											R$ ${pessoa.renda}</td>
											</c:when>
											<c:when test="${tipoP == 'FIADOR'}">
											
											<span class="corLetraNegrito" id="rendaFia">RENDA:</span><br/>
											R$ ${pessoa.renda}</td>
											</c:when>								
										</c:choose>
Este exemplo foi usando em um ralatorio se fosse inquilo mosta uma coisa se for fiador mostra outra.

tenho que fazer parecido com isso para recuperar as informações de clientes?

M
No meu projeto tenho um RelatorioCTR
protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
       String tipo = request.getParameter("tipo");
       String pesquisa = request.getParameter("valorPesquisa");
       String destino=null;
       if(tipo.equals("produto")){
            ProdutoDAO daoP = new ProdutoDAO();
            List<Produto> produtos;
            if((pesquisa!=null)&&(pesquisa.length()>0)){
                 produtos = daoP.buscarPorNome(pesquisa.toUpperCase());
            } else {
                produtos = daoP.buscarTodosProdutos();
            }
            request.setAttribute("listaProdutos", produtos);
            destino="relProduto.jsp";

       }else if(tipo.equals("unidadeMedida")){
           UnidadeMedidaDAO daoUM= new UnidadeMedidaDAO();
           List<UnidadeMedida> unidades;
           if((pesquisa!=null)&&(pesquisa.length()>0)){
                 unidades = daoUM.buscarPorDescricao(pesquisa.toUpperCase());
            } else {
                unidades = daoUM.buscarTodasUnidadesMedida();
            }
           request.setAttribute("listaUnidades", unidades);
           destino="relUnidades.jsp";

       }else if(tipo.equals("cliente")){
           ClienteDAO daoC= new ClienteDAO();
           List<Cliente> cliente;
           if((pesquisa!=null)&&(pesquisa.length()>0)){
                 cliente = daoC.buscarPorNome(pesquisa.toUpperCase());
            } else {
                cliente = daoC.buscarTodosClientes();
            }
           request.setAttribute("listaCliente", cliente);
           destino="relCliente.jsp";
       }

     

       RequestDispatcher enviar = request.getRequestDispatcher(destino);
       enviar.forward(request, response);

Estou achando que tenho que criar uma lista para trazer as informações de pessoaJuridica e pessoaFisica, pois usando do jei que esta ele só mostra Cliente.

Como devo fazer isso?

Alguem pode me ajuda?

M

Fuçando e pegando ajuda com alguns amigos consegui resolver meu problema.

no meu RelatorioCTR, tirei a lista de cliente e fiz 2 listas:
-ListaPessoaFisica
-ListaPessoaJuridica

E na pagina de relatorio eu chamo todos os dados de Pjuridica e novamente de Pfisica.

Se existir os 2 tipo de clientes a tabela fica com todas informçãoes.

Deu certo!

Estou sem os códigos aqui, mas se alguem precisar eu passo depois.

Obrigado pela ajuda de todos

Criado 8 de novembro de 2011
Ultima resposta 1 de dez. de 2011
Respostas 6
Participantes 2