1
resposta

Problemas para pegar o valor do p:selectOneListbox

Criar esse projeto para praticar, no entanto não estou conseguindo pegar o valor que selecione no selectOneListBox, o valor fica nulo na classe pessoaJuridicaBean. Pesquisei no site do primeFaces e está igual, incluse aos exemplos das aulas aqui no aluno. Poderia me dar uma força? Segue o código do xhtml:

O valor do tipo da pessoa que não consigo pegar:

<?xml version="1.0" encoding="UTF-8" ?>
<!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:h="http://xmlns.jcp.org/jsf/html"
    xmlns:f="http://xmlns.jcp.org/jsf/core"
    xmlns:p="http://primefaces.org/ui"
    xmlns:ui="http://xmlns.jcp.org/jsf/facelets">

<h:form id="formInformacaoGeral">
    <p:messages id="messages" />
    <p:panelGrid columns="2" id="dadosGerais">

        <p:outputLabel value="Status" for="ativa"/>
        <p:selectBooleanButton value="#{pessoaJuridicaBean.pessoa.ativa}" required="true" onLabel="Ativa" offLabel="Inativa" style="width:60px" id="ativa" disabled="true" />

        <p:outputLabel for="tipo" value="Tipo Pessoa:" />
        <p:selectOneListbox  id="tipo" value="#{pessoaJuridicaBean.tipoRelacionamentoPessoa}">
            <f:selectItem itemLabel="Cliente" itemValue="0" />
            <f:selectItem itemLabel="Fornecedor" itemValue="1" />
        </p:selectOneListbox>

        <p:outputLabel value="Id:" for="idEmpresa"/>
        <p:inputText id="idEmpresa" value="#{pessoaJuridicaBean.pessoa.id}" required="true" disabled="true" />

        <p:outputLabel value="Nome Fantasia:" for="nomeFantasia"/>
        <p:inputText id="nomeFantasia"    value="#{pessoaJuridicaBean.pessoa.nomeFantasia}" required="true" requiredMessage="Nome fantasia obrigatório" 
            validatorMessage="Nome fantasia não pode ser superior a 60 caracteres." size="60">
            <f:validateLength maximum="60"/>
            <f:ajax event="blur" render="messages"/>
        </p:inputText>

        <p:outputLabel value="Razão Social:" for="razaoSocial"/>
        <p:inputText id="razaoSocial" value="#{pessoaJuridicaBean.pessoa.razaoSocial}" required="true" requiredMessage="Razão social obrigatório" 
            validatorMessage="Razão social não pode ser superior a 60 caracteres." size="60">
            <f:validateLength maximum="60"/>
            <f:ajax event="blur" render="messages"/>
        </p:inputText>

        <p:outputLabel value="CNPJ:" for="cnpj"/>
        <p:inputMask id="cnpj" mask="99.999.999/9999-99" value="#{pessoaJuridicaBean.pessoa.cnpj}" validator="#{pessoaJuridicaBean.validarCampoNumerico}" 
            rendered="true" required="true" requiredMessage="Cnpj e obrigatório">
            <f:ajax event="keypress" render="messages"/>
        </p:inputMask>

        <p:outputLabel value="Inscrição Estadual" for="ie"/>
        <p:inputText mask="" value="#{pessoaJuridicaBean.pessoa.ie}" validator="#{pessoaJuridicaBean.validarCampoNumerico}" id="ie" required="true">
            <f:ajax event="keypress" render="messages"/>
        </p:inputText>    

    </p:panelGrid>
</h:form>
</html>

Código da classe pessoaJuridicaBean:

package br.com.mecanicaApoloSistem.bean;

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

import javax.faces.application.FacesMessage;
import javax.faces.bean.ViewScoped;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.validator.ValidatorException;
import javax.transaction.Transactional;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;

import br.com.mecanicaApoloSistem.dao.LogradouroDAO;
import br.com.mecanicaApoloSistem.dao.PessoaJuridicaDAO;
import br.com.mecanicaApoloSistem.dao.TelefoneDAO;
import br.com.mecanicaApoloSistem.dataModel.PessoaJuridicaDataModel;
import br.com.mecanicaApoloSistem.model.Logradouro;
import br.com.mecanicaApoloSistem.model.Municipio;
import br.com.mecanicaApoloSistem.model.PessoaJuridica;
import br.com.mecanicaApoloSistem.model.Telefone;
import br.com.mecanicaApoloSistem.model.Tipo;
import br.com.mecanicaApoloSistem.util.FacesUtil;

@Controller
@ViewScoped
public class PessoaJuridicaBean extends FacesUtil implements Serializable {

    private static final long serialVersionUID = 4134273637579805759L;

    private PessoaJuridica pessoa = new PessoaJuridica();
    private Logradouro logradouro = new Logradouro();
    private Telefone telefone = new Telefone();
    @Autowired
    private PessoaJuridicaDAO pessoaDAO;
    @Autowired
    private LogradouroDAO logradouroDAO;
    @Autowired
    private TelefoneDAO telefoneDAO;
    @Autowired
    private PessoaJuridicaDataModel pessoaJuridicaDataModel;
    private Integer tipoRelacionamentoPessoa;

    public PessoaJuridica getPessoa() {
        return pessoa;
    }

    public void setPessoa(PessoaJuridica pessoa) {
        this.pessoa = pessoa;
    }

    public void validarCampoNumerico(FacesContext fc, UIComponent component, Object value) throws ValidatorException {
        try{
            //Long.parseLong(value.toString());
            System.out.println(value.toString());
        }catch (Exception ex){
            throw new ValidatorException(new FacesMessage("CNPJ ou IE aceitam apenas números."));
        }
    }

    @Transactional
    public void salvar(){
        this.pessoa.setAtiva(true);
        if(this.pessoa.getId() == null){
            try{

                if(getTipoRelacionamentoPessoa().equals(Tipo.CLIENTE)){
                    pessoa.setTipo(Tipo.CLIENTE);
                }else{
                    pessoa.setTipo(Tipo.FORNECEDOR);
                }

                pessoaDAO.salvar(pessoa);    

                if(pessoa.getListaLogradouros() != null){

                    for(Logradouro l: pessoa.getListaLogradouros()){
                        salvarLogradouro(l);
                    }    
                }

                if(pessoa.getTelefones() != null){
                    for(Telefone t: pessoa.getTelefones()){
                        salvarTelefone(t);
                    }
                }
                this.info("Pessoa cadastrada com sucesso");
            }catch (Exception ex){
                this.error("Problemas ao salvar os dados da empresa. Detalhes: " + ex);
            }
        }else{
            try{
                pessoaDAO.atualizar(pessoa);

                for(Logradouro l: pessoa.getListaLogradouros()){
                    salvarLogradouro(l);
                }    

                for(Telefone t: pessoa.getTelefones()){
                    salvarTelefone(t);
                }

                this.info("Pessoa editada com sucesso");
            }catch (Exception ex){
                this.error("Problemas ao atualizar os dados da empresa. Detalhes: " + ex);
            }
        }
        pessoa = new PessoaJuridica();
    }

    @Transactional
    public void salvarLogradouro(Logradouro logradouro){
        try{
            if(logradouro.getId() == null){
                logradouroDAO.salvar(logradouro);
            }
        }catch (Exception ex){
            this.error("Problemas ao salvar o logradourdo: " + ex);
        }
    }

    public void adicionarLogradouro(Municipio municipio){
        logradouro.setMunicipio(municipio);
        logradouro.setPessoa(pessoa);
        this.pessoa.adicionarLogradouro(logradouro);
        logradouro = new Logradouro();
    }

    public void adicionarTelefone(){
        this.telefone.setPessoa(this.pessoa);
        this.pessoa.adicionarTelefone(this.telefone);
        this.telefone = new Telefone();
    }

    @Transactional
    public void salvarTelefone(Telefone telefone){
        try{
            if(telefone.getId() == null){
                telefoneDAO.salvar(telefone);
            }
        }catch (Exception ex){
            this.error("Problemas ao salvar o telefone: " + ex);
        }
    }

    @Transactional
    public void removerTelefone(Telefone telefone){
        try{
            pessoa.removerTelefone(telefone);
            telefoneDAO.remover(telefone);
        }catch (Exception ex){
            this.error("Problemas ao remover o telefone: " + ex);
        }
    }

    @Transactional
    public void removerLogradouro(Logradouro logradouro){
        try{
            pessoa.removerLogradouro(logradouro);
            logradouroDAO.remover(logradouro);
        }catch (Exception ex){
            this.error("Problemas ao remover o logradouro");
        }
    }

    @Transactional
    public void carregar(PessoaJuridica pessoaJuridica){
        try{
            this.pessoa = pessoaDAO.carregar(pessoaJuridica);
            tipoRelacionamentoPessoa = pessoa.getTipo().ordinal();
        }catch (Exception ex){
            this.error("Problemas ao carregar a empresa. Detalhes " + ex);
        }
    }

    @Transactional
    public void remover(PessoaJuridica pessoaJuridica){
        try{
            pessoaDAO.remover(pessoaJuridica);
            this.pessoa = new PessoaJuridica();
        }catch (Exception ex){
            this.error("Problemas ao remover a empresa. Detalhes " +  ex);
        }
    }

    public Logradouro getLogradouro() {
        return logradouro;
    }

    public void setLogradouro(Logradouro logradouro) {
        this.logradouro = logradouro;
    }

    public List<Logradouro> getListaLogradouro() {
        return this.pessoa.getListaLogradouros();
    }

    public List<Telefone> getListaTelefone(){
        return this.pessoa.getTelefones();
    }


    public Telefone getTelefone() {
        return telefone;
    }

    public void setTelefone(Telefone telefone) {
        this.telefone = telefone;
    }

    public PessoaJuridicaDataModel getPessoaJuridicaDataModel() {
        return pessoaJuridicaDataModel;
    }

    public void setPessoaJuridicaDataModel(PessoaJuridicaDataModel pessoaJuridicaDataModel) {
        this.pessoaJuridicaDataModel = pessoaJuridicaDataModel;
    }

    public Integer getTipoRelacionamentoPessoa() {
        return tipoRelacionamentoPessoa;
    }

    public void setTipoRelacionamentoPessoa(Integer tipoRelacionamentoPessoa) {
        this.tipoRelacionamentoPessoa = tipoRelacionamentoPessoa;
    }
}
1 resposta

Olá Fabrício tudo bem?

Cara faz um tempo que eu não mexo com JSF e principalmente com primefaces.

Mas tenta fazer o seguinte, substituí os valores dos itemValue de 0ou 1 para CLIENTE ou FORNECEDOR.

 <p:selectOneListbox  id="tipo" value="#{pessoaJuridicaBean.tipoRelacionamentoPessoa}">
            <f:selectItem itemLabel="Cliente" itemValue="CLIENTE" />
            <f:selectItem itemLabel="Fornecedor" itemValue="FORNECEDOR" />
        </p:selectOneListbox>

É um chute, mas acho que vale a pena testar.