Recuperar id entre MB usando JSF

8 respostas
anderson.agr

Boa noite pessoal,

Estou construindo uma aplicação em nível de estudante, que deve fazer o seguinte:
Tenho que cadastrar uma Nota fiscal e essa nota fiscal tem vários produtos, então fiz um fomulario para cadastrar essa nota que ao clicar no botão salvar envio a nota para o banco de dados e abro a tela para cadastrar os produtos, porém não consigo levar o nº da nota para essa tela, por consequencia não consigo recuperar o id.
Consegui fazer usando comboBox, porém fica muito lento, acho que seja por causa dos carregamento dos combos.
meus códigos estão aí se alguém tiver uma saída…é tipo um carrinho de compras…desse jeito tá rodando mas não acho que seja o ideal.

NotaMB

NotaFiscalFace

package ro.gui.anderson.GapfMB;

import java.sql.SQLException;
import java.util.LinkedList;
import java.util.List;
import javax.faces.model.SelectItem;
import ro.gui.anderson.GapfDao.NotaFiscalDao;
import ro.gui.anderson.GapfDao.FornecedorDao;
import ro.gui.anderson.GapfBean.Fornecedor;
import ro.gui.anderson.GapfBean.GuiaEntrada;
import ro.gui.anderson.GapfBean.NotaFiscal;

/**
 *
 * @author Windows
 */

public class NotaFiscalFace {

   private FornecedorDao forn = new FornecedorDao();
//   private ProdutoDao prod = new ProdutoDao();
//   private GuiaEntradaDao enta = new GuiaEntradaDao();
   private NotaFiscalDao  nota = new NotaFiscalDao();
   private NotaFiscal selectNotaFiscal;
   private List<NotaFiscal> notaFiscal;
   private GuiaEntrada selectGuiaEntrada;
//   private List<GuiaEntrada> guiaEntrada;



    public NotaFiscalFace() {
    }
    
    public String StartAddNotaFiscal(){
        selectNotaFiscal = new NotaFiscal();
   
        return "gotoAddNewNotaFiscal";
    }

      public String FinishAddNotaFiscal() throws ClassNotFoundException, SQLException{
       // enta.add(selectGuiaEntrada);
        nota.add(selectNotaFiscal);
        GuiaEntradaFace gui = new GuiaEntradaFace();
        gui.setSelectNota(selectNotaFiscal);
        notaFiscal = null;
       // guiaEntrada = null;
        return "gotoAddNewGuiaEntrada";
    }

       public List<NotaFiscal> getNotaFiscal() throws ClassNotFoundException, SQLException{

          if (notaFiscal == null){
          notaFiscal = nota.getNotaFiscal();
          }
          return notaFiscal;
      }
      
      public List<SelectItem> getFornecedor() throws ClassNotFoundException, SQLException{

         List<SelectItem> toReturn = new LinkedList<SelectItem>();
          for (Fornecedor forne : forn.getAllFornecedor()){
              toReturn.add(new SelectItem(forne, forne.getForn_nome()));
          }
          return toReturn;


      }
     

     
       public String StartEditNotaFiscal() throws ClassNotFoundException, SQLException{
           return "gotoEditNotaFiscal";
    }
        public String FinishEditNotaFiscal() throws ClassNotFoundException, SQLException{
        nota.set(selectNotaFiscal);
        notaFiscal = null;
        return "gotoListNotaFiscal";
    }
         public String CancelEditNotaFiscal() throws ClassNotFoundException, SQLException{
        notaFiscal = null ;
        return "gotoListNotaFiscal";
         }
         public String RetornarInicio()throws ClassNotFoundException, SQLException{
             return"gotoReturnInicio";
         }

    public NotaFiscal getSelectNotaFiscal() {
        return selectNotaFiscal;
    }

    public void setSelectNotaFiscal(NotaFiscal selectNotaFiscal) {
        this.selectNotaFiscal = selectNotaFiscal;
    }
   }

GuiaEntradaMB

package ro.gui.anderson.GapfMB;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import javax.faces.model.SelectItem;
import ro.gui.anderson.GapfBean.GuiaEntrada;
import ro.gui.anderson.GapfBean.NotaFiscal;
import ro.gui.anderson.GapfBean.Produto;

import ro.gui.anderson.GapfDao.GuiaEntradaDao;
import ro.gui.anderson.GapfDao.NotaFiscalDao;
import ro.gui.anderson.GapfDao.ProdutoDao;

/**
 *
 * @author anderson.agr
 */

public class GuiaEntradaFace {

 /** Creates a new instance of GuiaEntradaFace */
//     private FornecedorDao forn = new FornecedorDao();

   private ProdutoDao daoprod = new ProdutoDao();
   private Produto prod = new Produto();
   private GuiaEntradaDao enta = new GuiaEntradaDao();
   private NotaFiscalDao  nota = new NotaFiscalDao();
   private List<GuiaEntrada> entradas = new ArrayList<GuiaEntrada>();
   private GuiaEntrada selectGuiaEntrada;
   private Produto selectProduto;
   private NotaFiscal selectNota;
 //  private String numNota;

    public GuiaEntradaFace() {
    selectGuiaEntrada = new GuiaEntrada();
  
    }
 public String IncluirProdutos() throws ClassNotFoundException, SQLException{
     
 
     entradas.add(selectGuiaEntrada);
     selectGuiaEntrada = null;
     selectGuiaEntrada = new GuiaEntrada();
     return "gotoIncluirGuia";

 }

 public String CadastrarGuias() throws ClassNotFoundException, SQLException {


            for (GuiaEntrada guia : this.getEntradas()) {
                enta.add(guia);
            }
            entradas.clear();
            selectGuiaEntrada = new GuiaEntrada();
          
      return "gotoIncluirGuia";
}
  public String CancelEditGuia() throws ClassNotFoundException, SQLException{
      entradas.clear();
      selectGuiaEntrada = new GuiaEntrada();
        return "gotoIncluirGuia";
         }
  public List<GuiaEntrada> getEntradas() throws ClassNotFoundException, SQLException{

         
          return entradas;
      }
  public String StartEditProdutoSelecionado(){

      return "GotoEditProdutoSelecionado";

  }
  public String RemoverProdutoSelecionado(){

     return "gotoIncluirGuia";
  }
 public List<SelectItem> getProdutos() throws ClassNotFoundException, SQLException{

         List<SelectItem> toReturn = new LinkedList<SelectItem>();
          for (Produto clase : daoprod.getProduto()){
              toReturn.add(new SelectItem(clase, clase.getProd_descricao()));
          }
          return toReturn;
 }

 public List<SelectItem> getNotas() throws ClassNotFoundException, SQLException{

         List<SelectItem> toReturn = new LinkedList<SelectItem>();
          for (NotaFiscal clase : nota.getNotaFiscal()){
              toReturn.add(new SelectItem(clase, clase.getNota_numero()));
          }
          return toReturn;
 }

   

    public GuiaEntrada getSelectGuiaEntrada() {
        return selectGuiaEntrada;
    }

    public void setSelectGuiaEntrada(GuiaEntrada selectGuiaEntrada) {
        this.selectGuiaEntrada = selectGuiaEntrada;
    }

    public Produto getSelectProduto() {
        return selectProduto;
    }

    public void setSelectProduto(Produto selectProduto) {
        this.selectProduto = selectProduto;
    }
    public String RegraTemporaria(){
        return "gotoAdmin";
    }

    /**
     * @return the selectNota
     */
    public NotaFiscal getSelectNota() {
        return selectNota;
    }

    /**
     * @param selectNota the selectNota to set
     */
    public void setSelectNota(NotaFiscal selectNota) {
        this.selectNota = selectNota;
    }

    /**
     * @return the numNota
     *
    public String getNumNota() {
        return numNota;
    }

    /**
     * @param numNota the numNota to set
     *
    public void setNumNota(String numNota) {
        this.numNota = numNota;
    }*/
}

Minha Paginas JSF
IncluirNotaFiscal

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

<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>INCLUIR GUIA</title>
    </head>
    <body>
        <f:view>
            <h1>Incluindo uma nova Guia</h1>

            <h:form >
                <h:messages style="left: 200px; top: 330px; position: absolute" />
                <h:outputLabel style="left: 20px; top: 80px; position: absolute" value ="Nota Fiscal" />
                <h:inputText size="25" style="left: 100px; top: 80px; position: absolute" value = "#{NotaFiscalFace.selectNotaFiscal.nota_numero}"/>
                <br>
                <h:outputLabel style="left: 20px; top: 110px; position: absolute" value ="Série" />
                <h:inputText size="25" style="left: 100px; top: 110px; position: absolute" value = "#{NotaFiscalFace.selectNotaFiscal.nota_serie}"/>
                <br>
                <h:outputLabel style="left: 20px; top: 140px; position: absolute" value ="Data de Emissão" />
                <h:inputText  size="10" style="left: 130px; top: 140px; position: absolute" value = "#{NotaFiscalFace.selectNotaFiscal.nota_dt_emissao}">
                    <f:convertDateTime dateStyle="long" type="date" pattern="dd/MM/yyyy"/>
                </h:inputText>
                <br>
                <h:outputLabel style="left: 20px; top: 170px; position: absolute" value = "Fornecedor:"/>
                <h:selectOneMenu  style="left: 100px; top: 170px; position: absolute" value="#{NotaFiscalFace.selectNotaFiscal.forn_id}">
                    <f:selectItems value="#{NotaFiscalFace.fornecedor}"/>
                    <f:converter converterId="FornecedorConverter"/>
                </h:selectOneMenu>
                <br>
                <h:commandButton style="left: 20px; top: 210px; position: absolute"  action="#{NotaFiscalFace.FinishAddNotaFiscal}" value="Incluir Guia"/>
                <h:commandButton style="left: 140px; top: 210px; position: absolute" action="gotoReturnInicio" value="Cancel"/>

            </h:form>
        </f:view>
    </body>
</html>

GuiaEntrada

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

<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">

<f:view>
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
            <title>JSP Page</title>
        </head>
        <body>
            <h:form>
                <h2 style="left: 20px; top: 10px; position: absolute">Incluir Guia</h2>
                <h:messages style="left: 200px; top: 330px; position: absolute" />
                <h:outputLabel style="left: 20px; top: 80px; position: absolute" value ="Nota Fiscal" />
                <h:selectOneMenu  style="left: 100px; top: 80px; position: absolute" value="#{GuiaentradaFace.selectGuiaEntrada.nota_id}">
                 <f:selectItems value="#{GuiaentradaFace.notas}"/>
                    <f:converter converterId="NotaFiscalConverter"/>
                </h:selectOneMenu>
                <h:outputLabel style="left: 20px; top: 110px; position: absolute" value ="Produto" />
                <h:selectOneMenu  style="left: 100px; top: 110px; position: absolute" value="#{GuiaentradaFace.selectGuiaEntrada.prod_id}">
                    <f:selectItems value="#{GuiaentradaFace.produtos}"/>
                    <f:converter converterId="ProdutoConverter"/>
                </h:selectOneMenu>
                <h:outputLabel style="left: 20px; top: 140px; position: absolute" value ="Quantidade" />
                <h:inputText size="20" style="left: 100px; top: 140px; position: absolute" value = "#{GuiaentradaFace.selectGuiaEntrada.enta_quantidade}"/>
                <h:outputLabel style="left: 20px; top: 170px; position: absolute" value ="Valor Unitario" />
                <h:inputText size="20" style="left: 120px; top: 170px; position: absolute" value = "#{GuiaentradaFace.selectGuiaEntrada.enta_vlr_unitario}"/>
                <h:outputLabel style="left: 20px; top: 200px; position: absolute" value ="Data Entrada" />
                <h:inputText size="10" style="left: 120px; top: 200px; position: absolute" value = "#{GuiaentradaFace.selectGuiaEntrada.enta_dt_entrada}">
                    <f:convertDateTime  type="date" pattern="dd/MM/yyyy"/>
                </h:inputText>
                <h:commandButton style="left: 20px; top: 240px; position: absolute"  action="#{GuiaentradaFace.IncluirProdutos}" value="Incluir Produtos"/>
                <h:commandButton style="left: 140px; top: 240px; position: absolute" action="#{GuiaentradaFace.CancelEditGuia}" value="Cancel"/>
                <h:commandButton style="left: 240px; top: 240px; position: absolute"  action="#{GuiaentradaFace.CadastrarGuias}" value="Cadastrar"/>
                <br>
                <br><br>
                <h3 style="left: 20px; top: 270px; position: absolute">Itens Adcionados</h3>
                <h:dataTable style="left: 20px; top: 320px; position: absolute"
                             title="Carrinho"
                             value="#{GuiaentradaFace.entradas}"
                             border="2" var="item">

                    <h:column>
                        <f:facet name = "header">
                            <h:outputText value="Nº Nota"/>
                        </f:facet>
                        <h:outputText value="#{item.nota_id.nota_numero}"/>
                    </h:column>
                    <h:column>
                        <f:facet name = "header">
                            <h:outputText value="Produto"/>
                        </f:facet>
                        <h:outputText value="#{item.prod_id.prod_descricao}"/>
                    </h:column>
                    <h:column>
                        <f:facet name = "header">
                            <h:outputText value="QTD"/>
                        </f:facet>
                        <h:outputText value="#{item.enta_quantidade}"/>
                    </h:column>
                    <h:column>
                        <f:facet name = "header">
                            <h:outputText value="Valor Total"/>
                        </f:facet>
                        <h:outputText value="#{item.enta_quantidade * item.enta_vlr_unitario}"/>
                    </h:column>
                     <h:column>
                        <f:facet name = "header">
                            <h:outputText value="Actions"/>
                        </f:facet>
                         <h:commandLink value = "Editar" action ="#{GuiaentradaFace.StartEditProdutoSelecionado}">
                            <f:setPropertyActionListener  target="#{GuiaentradaFace.selectGuiaEntrada}" value = "#{item}"/>
                        </h:commandLink> / 
                         <h:commandLink value = "Remover" action ="#{GuiaentradaFace.RemoverProdutoSelecionado}">
                            <f:setPropertyActionListener  target="#{GuiaentradaFace.selectGuiaEntrada}" value = "#{item}"/>
                        </h:commandLink>
                    </h:column>
                </h:dataTable>



            </h:form>
        </f:view>
    </body>
</html>

Se alguém puder ajudar…

8 Respostas

G

Porque você não coloca o número da nota na sessão?

anderson.agr

Cara eu não sou muito avançado em JSF, porém meu projeto tem que ser feito em jsf…
Como eu jogo o nº da nota na sessão, do jeito que vc mencionou, tem algum exemplo ou alguma leitura pra indicar?

Flavio_Almeida

Para acessar outro managedbean…

FacesContext fc = FacesContext.getCurrentInstance();

ELContext ec = fc.getELContext();

ELResolver er = fc.getApplication().getELResolver();

GuiaEntradaMB guiaEntradaMB = (GuiaEntradaMB) er.getValue(ec, null, "“GuiaEntradaMB”)

Abraço

anderson.agr

So pra ver se eu entendi…

Eu quero acessar o NotaFiscalMB, a partir do GuiaEntradaMB, então eu jogo esse código dentro do GuiaEntradaMB e substituio o GuiaEntrada pelo NotaFiscalMB?
é isso?
Assim eu posso manipular o objeto que guarda o id da nota e passa-lo para o objeto que guarda o id da nota no GuiaEntradaMB?

E isso entra onde? no Construtor?

Flavio_Almeida

Ah sim, deixe-me reformular então, pois confundi o papel dos seus managedBeans! :slight_smile:

Dentro do seu managedBean GuiaEntradaMB, no local onde você precisa acessar o Id da nota, você coloca esse código para poder ter acesso ao managedBean NotaFiscalMB:

FacesContext fc = FacesContext.getCurrentInstance();

ELContext ec = fc.getELContext();

ELResolver er = fc.getApplication().getELResolver();

NotaFiscalMB notaFiscalMB = (NotaFiscalMB) er.getValue(ec, null, “guiaEntradaMB”)

OBS: o parâmetro “guiaEntradaMB” é o nome que está no facesConfig.xml para seu managedBean e NÃO a nome da classe, falou?

Agora você tem acesso direto ao NotaFiscalMB dentro do GuiaEntradaMB. Você pode acessar o método que retorna o objeto que guarda o id da sua nota fiscal.

Bom, essé código é um pouco grande, não? Se você tiver apenas um instância de NotaFiscalMB, você pode declarar o método que você quer acessar (por exemplo, um que retorne o valor que você está querendo) como estático, desta forma, você poderá acessá-lo da seguinte maneira.

Dentro do seu GuiaEntradaMB

int idNotaFiscal = NotaFiscalMB.getIdNotaFiscal (repare que você está usando o nome da classe + o método que você quer chamar).

Espero ter ajudado.

anderson.agr

Agora Entendi…Vou tentar fazer e digo se conseguir resolver…
Obrigado pela atenção!!!

Flavio_Almeida

Ah, corrigindo…

Não é

NotaFiscalMB notaFiscalMB = (NotaFiscalMB) er.getValue(ec, null, “guiaEntradaMB”)

mas

NotaFiscalMB notaFiscalMB = (NotaFiscalMB) er.getValue(ec, null, “notaFiscalMB”)

Laubstein_M_cio

Dessa maneira você esta arruinando o que o FrameWork se propoe a realizar para você.

Use o <f:setPropertyActionListener> no botão de salvar para setar o id da nota Fiscal no seu outro MB de produtos.

Criado 10 de novembro de 2009
Ultima resposta 13 de nov. de 2009
Respostas 8
Participantes 4