Update a selectOneMenu (method in the bean)

0

Well I'm trying to get a selectOneMenu to populate another selectOneMenu and update a field, but I still do not quite understand how to do it.

classes:

package model;

import java.io.Serializable;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;


@Entity
@Table(name = "empresa")
public class Empresa implements Serializable {

    private static final long serialVersionUID = -8839523968593400725L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column
    private Integer id;
    @Column
    private String nome;
    @Column
    private String cnpj;

    @Column
    @OneToMany(mappedBy = "empresa")
    private List<Caixa> caixa;

    public Empresa(Integer id, String nome, String cnpj, List<Caixa> caixa) {
        super();
        this.id = id;
        this.nome = nome;
        this.cnpj = cnpj;
        this.caixa = caixa;
    }

    public Empresa() {
        super();
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getCnpj() {
        return cnpj;
    }

    public void setCnpj(String cnpj) {
        this.cnpj = cnpj;
    }

    public List<Caixa> getCaixa() {
        return caixa;
    }

    public void setCaixa(List<Caixa> caixa) {
        this.caixa = caixa;
    }

}
package model;

import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import org.hibernate.validator.NotNull;

@Entity
@Table(name = "caixa")
public class Caixa {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column
    private Integer id;
    @Column
    @NotNull
    private Integer numero;
    @Column
    private String localizacao;
    @Column
    private String descricao;

    @ManyToOne
    @JoinColumn(name="id_empresa")
    private Empresa empresa;

    @OneToMany(mappedBy="caixa")
    private List<Documento> documento;

    public Caixa(Integer id, Integer numero, String localizacao, String descricao, Empresa empresa,
            List<Documento> documento) {
        super();
        this.id = id;
        this.numero = numero;
        this.localizacao = localizacao;
        this.descricao = descricao;
        this.empresa = empresa;
        this.documento = documento;
    }
    public Caixa() {
    }

    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public Integer getNumero() {
        return numero;
    }
    public void setNumero(Integer numero) {
        this.numero = numero;
    }
    public String getLocalizacao() {
        return localizacao;
    }
    public void setLocalizacao(String localizacao) {
        this.localizacao = localizacao;
    }
    public String getDescricao() {
        return descricao;
    }
    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }
    public Empresa getEmpresa() {
        return empresa;
    }
    public void setEmpresa(Empresa empresa) {
        this.empresa = empresa;
    }
    public List<Documento> getDocumento() {
        return documento;
    }
    public void setDocumento(List<Documento> documento) {
        this.documento = documento;
    }


}
package model;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

@Entity
@Table(name = "documento")
public class Documento implements Serializable{


    private static final long serialVersionUID = -5578623853822576663L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column
    private Integer id;
    @Column
    private String nomeDoc;
    @Column
    private String img;
    @ManyToOne
    @JoinColumn(name = "id_caixa")
    private Caixa caixa;
    @Column
    private Date dataEntrada;
    @Column
    private Date dataSaida;


    public Documento() {
        super();
    }

    public Documento(Integer id, String nomeDoc, String img, Caixa caixa, Date dataEntrada, Date dataSaida) {
        super();
        this.id = id;
        this.nomeDoc = nomeDoc;
        this.img = img;
        this.caixa = caixa;
        this.dataEntrada = dataEntrada;
        this.dataSaida = dataSaida;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getNomeDoc() {
        return nomeDoc;
    }

    public void setNomeDoc(String nomeDoc) {
        this.nomeDoc = nomeDoc;
    }

    public String getImg() {
        return img;
    }

    public void setImg(String img) {
        this.img = img;
    }

    public Caixa getCaixa() {
        return caixa;
    }

    public void setCaixa(Caixa caixa) {
        this.caixa = caixa;
    }

    public Date getDataEntrada() {
        return dataEntrada;
    }

    public void setDataEntrada(Date dataEntrada) {
        this.dataEntrada = dataEntrada;
    }

    public Date getDataSaida() {
        return dataSaida;
    }

    public void setDataSaida(Date dataSaida) {
        this.dataSaida = dataSaida;
    }


}
package manager;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

import model.Empresa;
import persistence.EmpresaDao;

@ManagedBean(name = "eBean")
@ViewScoped
public class EmpresaBean {

    private Empresa empresa;
    private List<Empresa> lista;

    public EmpresaBean() {
        empresa = new Empresa();
        lista = new ArrayList<Empresa>();
    }

    public Empresa getEmpresa() {
        return empresa;
    }

    public void setEmpresa(Empresa empresa) {
        this.empresa = empresa;
    }

    public List<Empresa> getLista() {
        return lista;
    }

    public void setLista(List<Empresa> lista) {
        this.lista = lista;
    }

    public String cadastrar() {
        FacesContext fc = FacesContext.getCurrentInstance();
        try {
            new EmpresaDao().cadastrar(empresa);
            empresa = new Empresa();
            fc.addMessage("formCadEmp",
                    new FacesMessage(FacesMessage.SEVERITY_INFO, "caempresa", "Empresa cadastrada com sucesso !"));

        } catch (Exception e) {
            e.printStackTrace();
            fc.addMessage("formCadEmp", new FacesMessage(FacesMessage.SEVERITY_ERROR, "caempresa",
                    "Não foi possível cadastrar a empresa !"));
        }
        return null;
    }

    public String buscar() {
        FacesContext fc = FacesContext.getCurrentInstance();
        try {
            EmpresaDao ed = new EmpresaDao();
            lista = ed.listar();

            fc.addMessage("buscarEmpresa",
                    new FacesMessage(FacesMessage.SEVERITY_INFO, "buempresa", "Empresa localizada !"));
        } catch (Exception e) {
            e.printStackTrace();
            fc.addMessage("buscarEmpresa",
                    new FacesMessage(FacesMessage.SEVERITY_ERROR, "buempresa", "Empresa não encontrada !"));
        }
        return null;
    }

    public String buscarPorNome() {
        FacesContext fc = FacesContext.getCurrentInstance();
        try {
            EmpresaDao ed = new EmpresaDao();
            String nome = empresa.getNome();
            lista = ed.listarPorNome(nome);
            if (lista.size() == 0) {
                fc.addMessage("buscarEmpresa",
                        new FacesMessage(FacesMessage.SEVERITY_WARN, "bunempresa", "Nenhuma empresa cadastrada !"));
            }
        } catch (Exception e) {
            e.printStackTrace();
            fc.addMessage("buscarEmpresa",
                    new FacesMessage(FacesMessage.SEVERITY_ERROR, "bunempresa", "Empresa não Encontrada !"));
        }
        return null;
    }

    public void excluir() {
        FacesContext fc = FacesContext.getCurrentInstance();
        try {
            EmpresaDao ed = new EmpresaDao();
            ed.excluir(empresa);
            lista = new ArrayList<Empresa>();
            empresa = new Empresa();
            fc.addMessage("buscarEmpresa",
                    new FacesMessage(FacesMessage.SEVERITY_INFO, "exempresa", "Empresa excluída com sucesso !"));
        } catch (Exception e) {
            e.printStackTrace();
            fc.addMessage("buscarEmpresa",
                    new FacesMessage(FacesMessage.SEVERITY_ERROR, "exempresa", "Não foi possível excluir a empresa !"));
        }
    }

    public void editar() {
        FacesContext fc = FacesContext.getCurrentInstance();
        try {
            EmpresaDao ed = new EmpresaDao();
            ed.atualizar(empresa);
            fc.addMessage("formDetalhesEmpresa",
                    new FacesMessage(FacesMessage.SEVERITY_INFO, "edempresa", "Dados atualizados com sucesso !"));
        } catch (Exception e) {
            e.printStackTrace();
            fc.addMessage("formDetalhesEmpresa", new FacesMessage(FacesMessage.SEVERITY_ERROR, "edempresa",
                    "Não foi possível atualizar os dados !"));
        }
    }

    public String detalhes() {
        try {
            Integer id = empresa.getId();
            empresa = new EmpresaDao().buscarPorId(id);
            FacesContext.getCurrentInstance().getExternalContext().getFlash().put("e", empresa);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "detalhesEmpresa";
    }

    @PostConstruct
    public void init() {
        if (FacesContext.getCurrentInstance().getExternalContext().getFlash().get("e") != null) {
            empresa = (Empresa) FacesContext.getCurrentInstance().getExternalContext().getFlash().get("e");
        }
    }
}
package manager;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

import model.Caixa;
import model.Empresa;
import persistence.CaixaDao;
import persistence.EmpresaDao;

@ManagedBean
@ViewScoped
public class CaixaBean {

    private Caixa caixa;
    private Empresa empresa;
    private List<Caixa> listaCaixa;
    private EmpresaDao empresaDao;
    private CaixaDao caixaDao;
    private List<Empresa> empresas;

    @PostConstruct
    public void inicia() {

        caixa = new Caixa();
        empresa = new Empresa();
        listaCaixa = new ArrayList<Caixa>();
        this.empresaDao = new EmpresaDao();
        this.caixaDao = new CaixaDao();

        try {
            this.empresas = this.empresaDao.listar();

        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    public void obterEmpresaCompleta() {
        try {
            if (this.empresa != null && this.empresa.getId() != null) {
                this.empresa = this.empresaDao.buscarPorId(this.empresa.getId());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void inserirCaixa() {
        FacesContext fc = FacesContext.getCurrentInstance();
        try {

            this.caixa.setEmpresa(this.empresa);
            validaInsercao(caixa);
            this.caixaDao.cadastrar(caixa);
            fc.addMessage("formcadcaixa",
                    new FacesMessage(FacesMessage.SEVERITY_INFO, "cadcaixa", "Caixa cadastrada com sucesso !"));
        } catch (Exception e) {
            fc.addMessage("formcadcaixa",
                    new FacesMessage(FacesMessage.SEVERITY_ERROR, "cadcaixa", "Caixa não cadastrada !"));
        }
    }

    private void validaInsercao(Caixa caixa) throws Exception {
        List<Caixa> caixas = this.caixaDao.listarPorNumeroEEmpresa(caixa.getNumero(), caixa.getEmpresa().getId());
        if (caixas != null && caixas.size() > 0) {
            throw new Exception();
        }
    }

    public void editar() {
        FacesContext fc = FacesContext.getCurrentInstance();
        try {
            this.caixa.setEmpresa(this.empresa);
            this.caixaDao.atualizar(caixa);

            fc.addMessage("formdetalhescaixa",
                    new FacesMessage(FacesMessage.SEVERITY_INFO, "edcaixa", "Alterações salvas com sucesso !"));
        } catch (Exception e) {
            e.printStackTrace();
            fc.addMessage("formdetalhescaixa", new FacesMessage(FacesMessage.SEVERITY_ERROR, "edcaixa",
                    "Não foi possível salvar as alterações !"));
        }
    }

    public void excluir() {
        FacesContext fc = FacesContext.getCurrentInstance();
        try {

            fc.addMessage("", new FacesMessage(FacesMessage.SEVERITY_INFO, "excaixa", "Caixa excluída com sucesso !"));
        } catch (Exception e) {
            e.printStackTrace();
            fc.addMessage("",
                    new FacesMessage(FacesMessage.SEVERITY_ERROR, "excaixa", "Não foi possível excluir a caixa !"));
        }
    }

    public Caixa getCaixa() {
        return caixa;
    }

    public void setCaixa(Caixa caixa) {
        this.caixa = caixa;
    }

    public Empresa getEmpresa() {
        return empresa;
    }

    public void setEmpresa(Empresa empresa) {
        this.empresa = empresa;
    }

    public List<Caixa> getListaCaixa() {
        return listaCaixa;
    }

    public void setListaCaixa(List<Caixa> listaCaixa) {
        this.listaCaixa = listaCaixa;
    }

    public List<Empresa> getEmpresas() {
        return empresas;
    }

    public void setEmpresas(List<Empresa> empresas) {
        this.empresas = empresas;
    }

}
package manager;


import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import model.Caixa;
import model.Documento;
import model.Empresa;
import persistence.CaixaDao;
import persistence.DocumentoDao;
import persistence.EmpresaDao;

@ManagedBean(name = "docBean")
@ViewScoped

public class DocumentoBean {

    private Empresa empresa;
    private Caixa caixa;
    private Documento documento;
    private List<Empresa> listEmpresa;
    private List<Caixa> listCaixa;
    private List<Documento> listDocumento;
    private EmpresaDao empresaDao;
    private CaixaDao caixaDao;
    private DocumentoDao documentoDao;

    @PostConstruct
    public void inicia() {

        empresa = new Empresa();
        caixa = new Caixa();
        documento = new Documento();
        this.empresaDao = new EmpresaDao();
        this.caixaDao = new CaixaDao();
        this.documentoDao = new DocumentoDao();

        try {

            this.listEmpresa = this.empresaDao.listar();
            this.listDocumento = this.documentoDao.listar();
            this.listCaixa = this.caixaDao.listar();

        } catch (Exception e) {
            e.printStackTrace();

        }

    }

    public void obterEmpresaCompleta() {
        try {
            if (this.empresa != null && this.empresa.getId() != null) {
                this.empresa = this.empresaDao.buscarPorId(this.empresa.getId());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    public Empresa getEmpresa() {
        return empresa;
    }

    public void setEmpresa(Empresa empresa) {
        this.empresa = empresa;
    }

    public Caixa getCaixa() {
        return caixa;
    }

    public void setCaixa(Caixa caixa) {
        this.caixa = caixa;
    }

    public Documento getDocumento() {
        return documento;
    }

    public void setDocumento(Documento documento) {
        this.documento = documento;
    }

    public List<Empresa> getListEmpresa() {
        return listEmpresa;
    }

    public void setListEmpresa(List<Empresa> listEmpresa) {
        this.listEmpresa = listEmpresa;
    }

    public List<Caixa> getListCaixa() {
        return listCaixa;
    }

    public void setListCaixa(List<Caixa> listCaixa) {
        this.listCaixa = listCaixa;
    }

    public List<Documento> getListDocumento() {
        return listDocumento;
    }

    public void setListDocumento(List<Documento> listDocumento) {
        this.listDocumento = listDocumento;
    }

}

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:p="http://primefaces.org/ui">


<ui:composition template="/admin/layout.xhtml">
    <ui:define name="conteudo">

        <p:dialog header="INSERIR DOCUMENTOS" visible="true">
            <h:form id="formcaddoc">

                <h:panelGrid columns="1">

                    <h:outputText value="Empresa" />
                    <p:selectOneMenu style="width: 475px" id="empresa"
                        value="#{docBean.empresa.id}" valueChangeListener="#{docBean.obterEmpresaCompleta()}">
                        <f:selectItem itemLabel="--SELECIONE--" itemValue="#{null}" />
                        <f:selectItems value="#{docBean.listEmpresa}" var="empresa"
                            itemLabel="#{empresa.nome}" itemValue="#{empresa.id}" />

                        <p:ajax event="itemSelect"
                            listener="#{docBean.obterEmpresaCompleta()}" update="cnpj" />

                    </p:selectOneMenu>

                    <h:panelGrid columns="2">
                        <h:panelGrid columns="1">
                            <h:outputText value="CNPJ" />
                            <p:inputMask mask="99.999.999/9999-99" style="text-align: center"
                                id="cnpj" value="#{docBean.empresa.cnpj}" />
                        </h:panelGrid>

                        <h:panelGrid columns="1">
                            <h:outputText value="Caixa" />
                            <p:selectOneMenu style="width: 120px" id="caixa"
                                value="#{docBean.caixa.numero}">
                                <f:selectItem itemLabel="--SELECIONE--" itemValue="#{null}" />
                                <f:selectItems value="#{docBean.listCaixa}" var="cx"
                                    itemLabel="#{cx.numero}" itemValue="#{cx.id}" />


                            </p:selectOneMenu>
                        </h:panelGrid>
                    </h:panelGrid>


                    <h:outputText value="Descrição/Etiqueta Caixa" />
                    <p:inputTextarea style="width: 500px" />

                    <p:separator />

                    <h:outputText value="Documento" />
                    <p:inputText style="width: 500px" />

                    <h:panelGrid columns="3">

                        <h:panelGrid columns="1">
                            <h:outputText value="Arquivo" style="text-align: center" />
                            <p:commandButton value="Anexar" style="width: 145px"></p:commandButton>
                        </h:panelGrid>


                        <h:panelGrid columns="1">
                            <h:outputText value="Data Arquivamento" />
                            <p:inputText style="width: 160px ;text-align: center" />
                        </h:panelGrid>
                        <h:panelGrid columns="1">
                            <h:outputText value="Data Expurgo" />
                            <p:inputText style="width: 160px ;text-align: center" />
                        </h:panelGrid>




                    </h:panelGrid>

                    <h:panelGrid width="100%" style="text-align: right">

                        <p:commandButton value="Inserir">
                        </p:commandButton>
                    </h:panelGrid>

                </h:panelGrid>

            </h:form>

        </p:dialog>

    </ui:define>
</ui:composition>
</html>

I have a selectOneMenu that searches a list of registered companies and when selecting the desired company it updates the CNPJ field. Now I would like that when selecting the company another selectOneMenu would search only the registered boxes for that company.

    
asked by anonymous 17.11.2017 / 21:58

1 answer

0

First you create a list by searching for a box by company, then in your bean create a listerner method to load that list when selecting a particular company. Like this:

public void listaPorEmpresa(AjaxBehaviorEvent event) {
listadeCaixas=this.caixaDao.listarPorEmpresa(caixa.getEmpresa().getNome());
}

//seleciona empresa no seu select chama o método e carrega a lista de caixas
<p:selectOneMenu value="#{caixaBean.empresa.nome}">
  <f:selectItem itemLabel="Selecione" />
  <f:selectItems value="#{caixaBean.listEmpresa}" var="c" itemValue="#{c}" itemLabel="#{c.empresa}" />
  <p:ajax process="@this" update="listaCaixas" listener="#{caixaBean.listaPorEmpresa}"/>
</p:selectOneMenu>

//carrega a lista de objetos carregados no listerner
<p:selectOneMenu id=" listaCaixas "
    value="#{caixaBean.caixa}">
    <f:selectItem itemLabel="Selecione" />
    <f:selectItems value="#{caixaBean.listadeCaixas}" >
</p:selectOneMenu>

With this example I believe you can implement it smoothly.

    
18.11.2017 / 00:45