Exibir informações de duas tabelas do bd em um mesmo form?

2 respostas Resolvido
java
jairodione

Olá Pessoal!

Gostaria de exibir os itens de um pedido feito no mesmo formulário onde é visualizado as informações de quem fez o pedido. Pois desejo fazer um update no pedido mostrando os itens deste pedido!

A pagina JSP que mostra as informações de quem fez o pedido está descrito abaixo:

<%-- 
    Document   : index
    Created on : 17/01/2017, 20:57:39
    Author     : Jairo
--%>
<%@page import="br.com.jairo.modelo.ItensVenda"%>
<%@page import="br.com.jairo.modelo.Venda"%>
<%@page import="java.util.Iterator"%>
<%@page import="java.util.List"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<%@taglib tagdir="/WEB-INF/tags" prefix="tagsJairo" %>
<tagsJairo:verificaUsuario/>
<c:import url="cabecalho.jsp"/>
<h1>Atualização de Pedidos</h1>
<form id="formAlteraPedido" method="post" action="AlteraPedido"
    <div class="campos">
        <label for="vencodigo">Codigo do Pedido.:</label>
        <input type="text" name="vencodigo" value="${param.vencodigo}" readonly size="10" <br><br>
    </div>
    <div class="campos">
        <label for="vendata">Data do Pedido.:</label>
        <input type="date" name="vendata" id="vendata" value="${param.vendata}" size="10" readonly <br><br>
    </div>
    <div class="campos">
        <label for="vencli">Nome do Cliente.:</label>
        <input type="text" name="vencli" value="${param.vencli}" readonly size="10" <br><br>
    </div>
    <div class="campos">
        <label for="venvaltotal">Valor Total do Pedido.:</label>
        <input type="text" name="venvaltotal" value="${param.venvaltotal}" readonly size="10"<br>
    </div>
    <div class="campos">
        <label for="venobs">Observações do Pedido.:</label>
        <input type="text" name="venobs" value="${param.venobs}" size="100" <br>
    </div>
    <div class="campos">
        <label for="vensituacao">Pedido Concluido.:</label>
        <input type="checkbox" name="vensituacao" value="${param.vensituacao}"<br>
    </div>
    <input type="submit" name="Atualizar" value="Atualizar" 
</form

Abaixo o método que utilizo para atualizar o pedido. Lembrando que é para atualizar somente o pedido não os itens do pedido.

//metodo que altera o pedido feito pelo usuario
public void alteraPedido(Venda vendas) throws SQLException {
    String sql = "update vendas set vendata=?, vencli=?, venvaltotal=?, venobs=?, vensituacao=? where vencodigo=?";
    PreparedStatement ps = null;

    try {
        ps = conexao.prepareStatement(sql);
        ps.setDate(1, new java.sql.Date(vendas.getVenData().getTime()));
        ps.setString(2, vendas.getVenCli());
        ps.setDouble(3, vendas.getVenValTotal());
        ps.setString(4, vendas.getVenObs());
        ps.setBoolean(5, vendas.getVenSituacao());
        ps.setInt(6, vendas.getVenCodigo());
        ps.execute();
    } catch (SQLException er) {
        Logger.getLogger(VendaDAO.class.getName()).log(Level.SEVERE, null, er);
    } finally {
        ps.close();
    }
}

Abaixo segue o servlet:

public class AlteraPedido extends HttpServlet {

    /** 
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException, ParseException, SQLException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();

        String codigo = request.getParameter("vencodigo");
        String venData = request.getParameter("vendata");
        String cliente = request.getParameter("vencli");
        String valorTotal = request.getParameter("venvaltotal");
        String obs = request.getParameter("venobs");
        String sit = request.getParameter("vensituacao");

        Venda venda = new Venda();
        venda.setVenCodigo(Integer.parseInt(codigo));

        DateFormat formatoData = new SimpleDateFormat("dd/MM/yyyy");
        if (venData != null) {
            Date dataFormatada = formatoData.parse(venData);
            venda.setVenData(dataFormatada);
        }

        venda.setVenCli(cliente);
        venda.setVenValTotal(Double.parseDouble(valorTotal));
        venda.setVenObs(obs);

        if (sit != null) {
            venda.setVenSituacao(true);
        }
        //venda.isVenSituacao();

        VendaDAO vendaDAO = new VendaDAO();
        vendaDAO.alteraPedido(venda);

        ItensVendaDAO itensVendaDAO = new ItensVendaDAO();

        try {
           //ESTE TRECHO DO CODIGO É PARA EXIBIR OS ITENS DO PEDIDO
            List listaPedidosPendentes = itensVendaDAO.getListaItensVendaPendentes();
            request.setAttribute("sessaoPendente", listaPedidosPendentes);
        } catch (SQLException erro) {
            Logger.getLogger(AlteraPedido.class.getName()).log(Level.SEVERE, null, erro);
        }
        RequestDispatcher rd = request.getRequestDispatcher("/PedidosCRUD");
        rd.forward(request, response);
    }

Abaixo segue o método para exibir os itens do pedido:

    //metodo que retorna a lista de itens da venda pendentes
    public List getListaItensVendaPendentes() throws SQLException {
        String sqli = "select * from itensvenda";
        PreparedStatement ps = null;
        ResultSet rs = null;
        List<ItensVenda> listaItensVendaPendentes = new ArrayList<ItensVenda>();
        try {
            ps = conexao.prepareStatement(sqli);
            rs = ps.executeQuery();
            while (rs.next()) {
                ItensVenda itensVenda = new ItensVenda();
                itensVenda.setItensCodigo(rs.getInt("itenscodigo"));
                itensVenda.setItensCodVenda(rs.getInt("itenscodvenda"));
                itensVenda.setItensCodProd(rs.getInt("itenscodprod"));
                itensVenda.setItensQuant(rs.getInt("itensquant"));
                itensVenda.setItensTotalVenda(rs.getDouble("itenstotalvenda"));
                listaItensVendaPendentes.add(itensVenda);
            }
            //System.out.println(listaItensVendaPendentes);
            return listaItensVendaPendentes;
        } catch (SQLException er) {
            Logger.getLogger(ItensVendaDAO.class.getName()).log(Level.SEVERE, null, er);
        } finally {
            //conexao.close();
            //ps.close();
            //rs.close();
        }
        return null;
    }

Como informei acima não consigo exibir os itens do pedido neste mesmo formulário, mas se eu fizer um jsp separado e um servlet separado somente para exibir os itens do pedido, eu consigo mostrar os itens do pedido.

Abaixo o jsp que fiz somente para exibir os itens do pedido:

<%-- 
    Document   : index
    Created on : 17/01/2017, 20:57:39
    Author     : Jairo
--%>
<%@page import="br.com.jairo.modelo.ItensVenda"%>
<%@page import="java.util.Iterator"%>
<%@page import="java.util.List"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<%@taglib tagdir="/WEB-INF/tags" prefix="tagsJairo" %>
<tagsJairo:verificaUsuario/>
<c:import url="cabecalho.jsp"/>
<h1>Atualização De Pedidos</h1>
<table border="1"
    <tr
        <tdSeq.</td><td>Cod. da Venda</td><td>Cod. do Produto</td><td>Qtd.</td><td>Valor Total</td>
    </tr
    <%
                List listaItensPendentes = (List) request.getAttribute("sessaoItensPendentes");

                for (Iterator iterator = listaItensPendentes.iterator(); iterator.hasNext();) {
                    ItensVenda itensVenda = (ItensVenda) iterator.next();%>
    <tr>
        <td><%=itensVenda.getItensCodigo()%></td>
        <td><%=itensVenda.getItensCodVenda()%></td>
        <td><%=itensVenda.getItensCodProd()%></td>
        <td><%=itensVenda.getItensQuant()%></td>
        <td><%=itensVenda.getItensTotalVenda()%></td>
    </tr>
    <%
                }
    %>
</table
<c:import url="rodape.jsp"/>

O servlet:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.jairo.controle;

import br.com.jairo.dao.ItensVendaDAO;
import br.com.jairo.modelo.ItensVenda;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author Jairo
 */
public class ListaPendente extends HttpServlet {

    /** 
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException, SQLException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();

        ItensVendaDAO itensVendaDAO = new ItensVendaDAO();
        try {
            List listaItensPendentes = itensVendaDAO.getListaItensVendaPendentes();
            request.setAttribute("sessaoItensPendentes", listaItensPendentes);
            RequestDispatcher rd = request.getRequestDispatcher("/itens.jsp");
            rd.forward(request, response);
        } catch (SQLException erro) {
            Logger.getLogger(ListaPendente.class.getName()).log(Level.SEVERE, null, erro);
        }
    }

Como fazer para mostrar estes itens do pedido em um mesmo formulário ou jsp?

2 Respostas

jonathan.sky

na sua servlet onde você manda os dados do cliente, para serem exibidos, você também pode mandar os produtos que ele comprou, assim sendo, é só exibir na JSP. Deu para saca?

jairodione
Solucao aceita

Pedi ajuda a um amigo, e o mesmo conseguiu solucionar o problema. Ficou da seguinte forma:

No arquivo alterapedidos.jsp:

<%-- 
    Document   : index
    Created on : 17/01/2017, 20:57:39
    Author     : Jairo
--%>
<%@page import="br.com.jairo.modelo.ItensVenda"%>
<%@page import="br.com.jairo.modelo.Venda"%>
<%@page import="java.util.Iterator"%>
<%@page import="java.util.List"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<%@taglib tagdir="/WEB-INF/tags" prefix="tagsJairo" %>
<tagsJairo:verificaUsuario/>
<c:import url="cabecalho.jsp"/>
<h1>Atualização de Pedidos</h1>
<form id="formAlteraPedido" method="post" action="AlteraPedido">
    <div class="campos">
        <label for="vencodigo">Codigo do Pedido.:</label>
        <input type="text" name="vencodigo" value="${sessionScope.venda.venCodigo}" readonly size="10"<br><br>
    </div>
    <div class="campos">
        <label for="vendata">Data do Pedido.:</label>
        <input type="date" name="vendata" id="vendata" value="${sessionScope.venda.venData}" size="10" readonly <br><br>
    </div>
    <div class="campos">
        <label for="vencli">Nome do Cliente.:</label>
        <input type="text" name="vencli" value="${sessionScope.venda.venCli}" readonly size="10" <br><br>
    </div>
    <div class="campos">
        <label for="venvaltotal">Valor Total do Pedido.:</label>
        <input type="text" name="venvaltotal" value="${sessionScope.venda.venValTotal}" readonly size="10" <br>
    </div>
    <div class="campos">
        <label for="venobs">Observações do Pedido.:</label>
        <input type="text" name="venobs" value="${sessionScope.venda.venObs}" size="100"<br>
    </div>
    <div class="campos">
        <label for="vensituacao">Pedido Concluido.:</label>
        <input type="checkbox" name="vensituacao" value="${sessionScope.venda.venSituacao}"<br>
    </div>
    <input type="submit" name="Atualizar" value="Atualizar" />
</form>

<form id="formItensVenda" method="post" action="ListaPendente">
    <tagsJairo:listaPedidosPendentesTable
</form>
<c:import url="rodape.jsp"/>

No metodo da classe ItensVendaDAO:

//metodo que retorna a lista de itens da venda
public List<ItensVenda> getItensVenda(int itensCodVenda) throws SQLException {
    String sql = "select i.*, p.proddescricao, p.prodvalor from itensvenda i inner join produtos p on p.prodcodigo = i.itenscodprod where itenscodvenda = " + itensCodVenda;
    PreparedStatement ps = null;
    ResultSet rs = null;
    List<ItensVenda> listaItensVenda = new ArrayList<ItensVenda>();
    try {
        ps = conexao.prepareStatement(sql);
        rs = ps.executeQuery();
        while (rs.next()) {
            ItensVenda itensVenda = new ItensVenda();
            itensVenda.setItensCodVenda(rs.getInt("itenscodvenda"));
            itensVenda.setItensCodProd(rs.getInt("itenscodprod"));
            itensVenda.setProdDescricao(rs.getString("proddescricao"));
            itensVenda.setItensQuant(rs.getInt("itensquant"));
            itensVenda.setProdValor(rs.getDouble("prodvalor"));
            itensVenda.setItensTotalVenda(rs.getDouble("itenstotalvenda"));
            listaItensVenda.add(itensVenda);
        }
    } catch (SQLException er) {
        Logger.getLogger(ItensVendaDAO.class.getName()).log(Level.SEVERE, null, er);
    } finally {
        //conexao.close();
        rs.close();
        ps.close();
    }
    return listaItensVenda;
}

No metodo da classe VendaDAO:

//metodo que carrega o pedido
public Venda carregaPedido(int codigo) throws SQLException {
    String sql = "select vencodigo, vendata, vencli, venvaltotal, venobs, vensituacao from vendas where vencodigo=?";
    PreparedStatement ps = null;
    ResultSet rs = null;
    Venda venda = new Venda();

    try {
        ps = conexao.prepareStatement(sql);
        ps.setInt(1, codigo);
        rs = ps.executeQuery();

        while (rs.next()) {
            venda.setVenCodigo(rs.getInt(1));
            venda.setVenData(rs.getDate(2));
            venda.setVenCli(rs.getString(3));
            venda.setVenValTotal(rs.getDouble(4));
            venda.setVenObs(rs.getString(5));
            venda.setVenSituacao(rs.getBoolean(6));
        }
    } catch (SQLException er) {
        Logger.getLogger(VendaDAO.class.getName()).log(Level.SEVERE, null, er);
    } finally {
        rs.close();
        ps.close();
    }

    return venda;
}

Foi criada uma nova servlet:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package br.com.jairo.controle;

import br.com.jairo.dao.ItensVendaDAO;
import br.com.jairo.dao.VendaDAO;
import br.com.jairo.modelo.Venda;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import java.text.ParseException;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author Jairo
 */
public class CarregaPedido extends HttpServlet {
   
    /** 
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException{
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        Venda venda = new Venda();

        String codigo = request.getParameter("vencodigo");
        /*
        //String venData = request.getParameter("vendata");
        //String cliente = request.getParameter("vencli");
        //String valorTotal = request.getParameter("venvaltotal");
        //String obs = request.getParameter("venobs");
        //String sit = request.getParameter("vensituacao");

        venda.setVenCodigo(Integer.parseInt(codigo));

        DateFormat formatoData = new SimpleDateFormat("dd/MM/yyyy");
        if (venData != null) {
            Date dataFormatada = formatoData.parse(venData);
            venda.setVenData(dataFormatada);
        }

        venda.setVenCli(cliente);
        venda.setVenValTotal(Double.parseDouble(valorTotal));
        venda.setVenObs(obs);

        if (sit != null) {
            venda.setVenSituacao(true);
        }
        //venda.isVenSituacao();
*/
        VendaDAO vendaDAO = new VendaDAO();
        ItensVendaDAO itensVendaDAO = new ItensVendaDAO();
        try {
            venda = vendaDAO.carregaPedido(Integer.parseInt(codigo));
            List listaPedidosPendentes = itensVendaDAO.getItensVenda(Integer.parseInt(codigo));
            request.getSession().setAttribute("venda", venda);
            request.getSession().setAttribute("itensVenda", listaPedidosPendentes);
        } catch (SQLException ex) {
            Logger.getLogger(CarregaPedido.class.getName()).log(Level.SEVERE, null, ex);
        }

        RequestDispatcher rd = request.getRequestDispatcher("alterapedidos.jsp");
        rd.forward(request, response);
    }

O trecho do arquivo listapedidos.tag que foi modificado:

out.println("<td><a href='CarregaPedido?vencodigo=" + codigo + "'>
<img src='imagens/altera.png' alt='Alterar'/></a></td>");

Com estas alterações o sistema fez o que eu gostaria!

Criado 23 de maio de 2017
Ultima resposta 28 de mai. de 2017
Respostas 2
Participantes 2