1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Metodo do MB não esta sendo chamado, será erro de validação

Prezados boa tarde.

Estou chamando um método no meu xhtml porém percebi que o mesmo não esta sendo chamado meu projeto esta usando CDI na entrada do xhtml os metodos e propriedades do MB estão sendo chamados porém ao chamar um Dialogo do primefaces onde dentro tenho o botão que chama o método salvar vi que o mesmo não esta sendo chamado.

Segue o código

Observação: vou descrever aqui o comportamento que achei estranho.... eu chamo chamo a tela, clico no botão para Adicionar um novo registro, neste momento o Dialogo do PF é chamado, insiro os dados e nada acontece, nenhum erro nada, nada mesmo contudo vejo no console do Eclipse que o converter é chamado, só não o método para gravar. Eu fecho o dialogo e chamo ele novamente, bem agora ele aparece com o input para o Estado com uma coloração ou seja como se tivesse havido uma validação coisa que não foi mostrada antes mais como eu não limpei o input quando chamo o dialogo pelo visto houve uma validação dos dados

A view ( Note que o botão esta no fim deste código é o botão dentro do dialogo do Primefaces )

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://xmlns.jcp.org/jsf/html"
    xmlns:f="http://xmlns.jcp.org/jsf/core"
    xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
    xmlns:p="http://primefaces.org/ui"
    template="/WEB-INF/templates/Layout.xhtml">

    <ui:define name="content">
        <h1 class="aw-page-title">Municípios</h1>

        <h:form id="frm">

            <p:toolbar>
                <p:toolbarGroup>
                    <p:commandButton id="btnAdd" title="Novo registro"
                        action="#{municipioC.preparaInclusao}"
                        oncomplete="PF('itemDialog').show()" process="@this"
                        update=":itemForm:itemPanel" icon="fa fa-fw fa-plus" />

                    <p:commandButton id="btnEdi" title="Edita registro"
                        action="#{municipioC.preparaAlteracao}"
                        oncomplete="PF('itemDialog').show()" process="@this"
                        update=":itemForm:itemPanel" icon="fa fa-fw fa-edit" />

                </p:toolbarGroup>
            </p:toolbar>

            <p:messages autoUpdate="false" />
            <p:dataTable id="itensTable" widgetVar="dataTable" var="item"
                loadingMessage="Carregando..." emptyMessage="Nenhum registro."
                reflow="true" value="#{municipioC.elementos}" selectionMode="single"
                selection="#{municipioC.registroSelecionado}"
                rowKey="#{item.idMunicipio}" style="margin-top:10px">

                <p:ajax event="rowSelect" listener="#{municipioC.selectRegistro}" />

                <p:column headerText="Id" style="width:50px">
                    <h:outputText value="#{item.idMunicipio}" />
                </p:column>

                <p:column headerText="Municipio">
                    <h:outputText value="#{item.dsMunicipio}" />
                </p:column>

                <p:column headerText="Uf">
                    <h:outputText value="#{item.estado.siglaEstado}" />
                </p:column>

            </p:dataTable>
        </h:form>

        <p:dialog widgetVar="itemDialog" header="Gerencia municipios"
            responsive="true" resizable="false" showEffect="explode"
            hideEffect="bounce" style="min-width: 400px" modal="true">

            <h:form id="itemForm">

                <h:panelGroup id="itemPanel" layout="block" styleClass="ui-fluid"
                    style="margin-top:10px;">
                    <!-- <p:messages id="msgDialog" autoUpdate="false" />  -->

                    <p:panelGrid columns="2" layout="grid"
                        styleClass="panelgrid-noborder"
                        columnClasses="ui-grid-col-4, ui-grid-col-8">

                        <p:outputLabel for="nome" value="Municipio:" />
                        <p:inputText id="nome" value="#{municipioC.municipio.dsMunicipio}"
                            placeholder="Municipio" size="50" />
                        <p:outputLabel for="ibge" value="Codigo IBGE:" />
                        <p:inputText id="ibge" value="#{municipioC.municipio.codIbge}"
                            placeholder="Codigo IBGE" size="10" />

                        <p:outputLabel for="estado" value="Estado" />
                        <p:selectOneMenu id="estado"
                            value="#{municipioC.municipio.estado}"
                            converter="estadoConverter" required="true">
                            <f:selectItem itemLabel="Selecione" />
                            <f:selectItems value="#{municipioC.estados}" var="itemE"
                                itemValue="#{itemE}" itemLabel="#{itemE.dsEstado}" />
                        </p:selectOneMenu>

                    </p:panelGrid>

                </h:panelGroup>

                <p:commandButton update=":frm:itensTable" action="#{municipioC.salvar}"                                                                     
                             process="@form"
                             icon="fa fa-fw fa-save" title="Salvar"/>                            
            </h:form>
        </p:dialog>

    </ui:define>
`

O controller MunicipioController.java

@Named(value = "municipioC")
@ViewScoped
public class MunicipioController extends AbstractMB {

    private static final long serialVersionUID = 1L;

    private int totalRegistros;
    private List<Municipio> elementos;
    private List<Estado> estados;
    private Municipio registroSelecionado;
    private Municipio municipio;

    @Inject
    private MunicipioService municipioService;

    @Inject
    private EstadoService estadoService;

    public MunicipioController() {
    }

    public void salvar() {
        System.out.println("salvar()");
        try {
            municipioService.save(municipio);
            closeDialog();
            displayInfoMessageToUser("Registro criado com sucesso!");
            load();
            preparaInclusao();
        } catch (InternalServiceError e) {
            keepDialogOpen();
            displayErrorMessageToUser("Ocorreu um erro ao atualizar o registro. "
                    + e.getMessage());
            e.printStackTrace();
        } catch (Exception e) {
            keepDialogOpen();
            displayErrorMessageToUser("Ocorreu um erro ao atualizar o registro. "
                    + e.getMessage());
            e.printStackTrace();
        }
    }

    public void excluir() {
        try {
            this.municipioService.delete(municipio);
            closeDialog();
            displayInfoMessageToUser("Registro excluido com sucesso!");
            load();
            preparaInclusao();
        } catch (InternalServiceError e) {
            keepDialogOpen();
            displayErrorMessageToUser("Ocorreu um erro ao tentar excluir o registro. "
                    + e.getMessage());
            e.printStackTrace();
        } catch (Exception e) {
            keepDialogOpen();
            displayErrorMessageToUser("Ocorreu um erro ao tentar excluir o registro. "
                    + e.getMessage());
            e.printStackTrace();
        }
    }

    public void selectRegistro(SelectEvent evt) {

        try {
            if (evt.getObject() != null) {
                this.registroSelecionado = (Municipio) evt.getObject();
            } else {
                this.registroSelecionado = null;
            }
        } catch (Exception e) {
            this.registroSelecionado = null;
        }
    }

    public List<Municipio> getElementos() {
        if (elementos == null) {
            load();
        }

        return elementos;
    }

    private void load() {
        elementos = municipioService.findAll();
    }

    public void preparaInclusao() {
        System.out.println("preparaInclusao()");
        this.municipio = new Municipio();

    }

    public void preparaAlteracao() {
        this.municipio = getRegistroSelecionado();
    }

    public void unselect() {
        this.registroSelecionado = null;
    }

    public Municipio getMunicipio() {
        System.out.println("getMunicipio()");
        if (municipio == null) {
            municipio = new Municipio();
        }

        return municipio;
    }

    public void setMunicipio(Municipio municipio) {
        System.out.println("setMunicipio()");
        this.municipio = municipio;
    }

    public Municipio getRegistroSelecionado() {
        if (registroSelecionado == null) {
            registroSelecionado = new Municipio();
        }

        return registroSelecionado;
    }

    public void setRegistroSelecionado(Municipio registroSelecionado) {
        this.registroSelecionado = registroSelecionado;
    }

    public List<Estado> getEstados() {
        if (estados == null) {
            estados = estadoService.findAll();
        }
        return estados;

    }

    @FacesConverter(forClass = Municipio.class)
    public static class MunicipioControllerConverter implements Converter {

        public Object getAsObject(FacesContext facesContext,
                UIComponent component, String value) {

            if (value != null) {
                return this.getAttributesFrom(component).get(value);
            }

            return null;
        }

        java.lang.Integer getKey(String value) {
            java.lang.Integer key;
            key = Integer.valueOf(value);
            return key;
        }

        String getStringKey(java.lang.Integer value) {
            StringBuffer sb = new StringBuffer();
            sb.append(value);
            return sb.toString();
        }

        public String getAsString(FacesContext facesContext,
                UIComponent component, Object object) {
            if (object == null) {
                return null;
            }
            if (object instanceof Municipio) {
                Municipio o = (Municipio) object;
                return getStringKey(o.getIdMunicipio());
            } else {
                throw new IllegalArgumentException("object " + object
                        + " is of type " + object.getClass().getName()
                        + "; expected type: "
                        + MunicipioController.class.getName());
            }
        }

        protected Map<String, Object> getAttributesFrom(UIComponent component) {
            return component.getAttributes();
        }

    }

}

o Converter

@FacesConverter(forClass = Estado.class, value="estadoConverter" )
public class EstadoConverter implements Converter {

    @Inject
    EstadoService estadoService;

    @Override
    public Object getAsObject(FacesContext facesContext, UIComponent uiComponent, String value) {

        Estado estado = null;

        if (StringUtils.isNotEmpty(value)){
            Integer Id = Integer.parseInt(value);
            estado = estadoService.findByID(Id);
        }

      return estado;
    }

    @Override
    public String getAsString(FacesContext facesContext, UIComponent uiComponent, Object value) {

        if (value == null) {
            return null;
        }        

        if (value instanceof Estado) {
            Estado entidade = (Estado) value;
            return entidade.getId() == null ? null : entidade.getId().toString();            
        }
        return "";
    }
}

e aqui o modelo get e set omitidos

@Entity
@Table(name = "estado")
public class Estado implements BaseEntity, Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="id_estado")
    private Integer id;

    @Column(name="sigla_estado", length=2 )
    private String siglaEstado;

    @Column(name="ds_estado", length=50)
    private String dsEstado;

    //bi-directional many-to-one association to Municipio
    @OneToMany(mappedBy="estado")
    private List<Municipio> municipios;

    public Estado() {
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result
                + ((id == null) ? 0 : id.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {

        System.out.println("Estado - equals()");            

        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Estado other = (Estado) obj;

        System.out.println("Estado - equals() Nome: "+other.siglaEstado);            

        if (id == null) {
            if (other.id != null)
                return false;
        } else if (!id.equals(other.id))
            return false;
        return true;
    }

    @Override
    public String toString() {
        return dsEstado;
    }


}
@Entity
@Table(name = "municipio")
@NamedQuery(
        name = "municipioPorEstado",
        query = "select m from Municipio m where m.estado = :estado order by m.dsMunicipio"
    )
public class Municipio implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)    
    @Column(name="id_municipio")
    private Integer idMunicipio;

    @NotEmpty
    @Column(name="ds_municipio", length=60)
    private String dsMunicipio;

    @NotEmpty
    @Column(name="cod_ibge", length=10)
    private String codIbge;

    //bi-directional many-to-one association to Estado
    @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name="id_estado")
    private Estado estado;        

    //bi-directional many-to-one association to Municipio
    @OneToMany(mappedBy="municipio")
    private List<Contato> contatos;


    public Municipio() {
    }

    public Integer getIdMunicipio() {
        return this.idMunicipio;
    }

    public void setIdMunicipio(Integer idMunicipio) {
        this.idMunicipio = idMunicipio;
    }

    public String getDsMunicipio() {
        return this.dsMunicipio;
    }

    public void setDsMunicipio(String dsMunicipio) {
        this.dsMunicipio = dsMunicipio;
    }

    public Estado getEstado() {
        return this.estado;
    }

    public void setEstado(Estado estado) {
        this.estado = estado;
    }    


    public List<Contato> getContatos() {
        return contatos;
    }

    public void setContatos(List<Contato> contatos) {
        this.contatos = contatos;
    }

    public String getCodIbge() {
        return codIbge;
    }

    public void setCodIbge(String codIbge) {
        this.codIbge = codIbge;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result
                + ((idMunicipio == null) ? 0 : idMunicipio.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {

        System.out.println("Municipio - equals()");            

        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Municipio other = (Municipio) obj;
        if (idMunicipio == null) {
            if (other.idMunicipio != null)
                return false;
        } else if (!idMunicipio.equals(other.idMunicipio))
            return false;
        return true;
    }

    @Override
    public String toString() {
        return dsMunicipio;
    }


}
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

0 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags jsf cdi primefaces ou faça a sua própria pergunta.