H:selectOneMenu ?[resolvido]

Bom dia !

Pessoal estou com um problema em um combobox, em consigo carregar as espsecialidade dos médicos no form dos médicos, mas quando eu seleciono uma especialidade no combobox, ele não cadastra, se deixar em branco funciona.

[code]
package br.app.sisau.jsf;

/**
*

  • @author Jr.
    */
    @ManagedBean(name = “medicoMB”)
    @ViewScoped
    public class MedicoManagedBean implements Serializable {

    private static Logger logger = Logger.getLogger(MedicoManagedBean.class);
    private String pesquisa;

    //COMBO
    private List<EspecialidadesBean> listaEspecialidade = new ArrayList<EspecialidadesBean>();
    private EspecialidadesBean especialidade = new EspecialidadesBean();
    private List<SelectItem> listaEspecialidadeItems = new ArrayList<SelectItem>();
    private int idEspetcialidadeSelecionada;

    @ManagedProperty(value = "#{userSessionMB}")
    private UserSessionManagedBean userSessionMB;

    public UserSessionManagedBean getUserSessionMB() {
    return userSessionMB;
    }

    public void setUserSessionMB(UserSessionManagedBean userSessionMB) {
    this.userSessionMB = userSessionMB;
    }

    @PostConstruct
    public void postConstruct() {

     listaMedicos = Service.getInstance().listarMerdicos();
    
     //COMBO especialidade
     setListaEspecialidade(Service.getInstance().listaEspecialidade());
     for (EspecialidadesBean sec : listaEspecialidade){
         //this.getListaEspecialidadeItems().add(new SelectItem(sec.getPkEspecialidade(),sec.getEspecialidade()));
         this.getListaEspecialidadeItems().add(new SelectItem(sec.getEspecialidade()));
     }
    

    }

    public boolean isAdicionarState() {
    return ADICIONAR_STATE.equals(this.getCurrentState());
    }

    public boolean isEditarState() {
    return EDITAR_STATE.equals(this.getCurrentState());

    }

    public void pesquisarMedicos() {
    listaMedicos = Service.getInstance().pesquisarMedicosCriteria(pesquisa);
    }

    public void prepareEditar() {
    this.setCurrentState(EDITAR_STATE);
    getListaMedicos().addAll(getListaMedicos());
    logger.debug("MEDICO—>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" + medicos);
    logger.debug("CURRENTSTATES—>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" +currentState);
    }

    public void clear() {
    this.medicos = new MedicosBean();
    }

    public void prepareAdicionar() {
    logger.debug("==========Preparando==========");
    this.setCurrentState(ADICIONAR_STATE);
    medicos = new MedicosBean();
    logger.debug("MEDICO—>>>>>>>>>>>>>>>>>>" + medicos);
    // this.clear();
    // this.setCurrentState(ADICIONAR_STATE);
    //
    logger.debug("MEDICO—>>>>>>>>>>>>>>>>>>" + medicos);
    logger.debug("CURRENTSTATES—>>>>>>>>>>>" +currentState);

    }

    public void gravar() {
    logger.debug("===========gravando…============");
    if (ADICIONAR_STATE.equals(this.currentState)) {
    logger.debug("========ADICIONAR REGISTRO"+currentState);
    Service.getInstance().cadastrarMedicos(medicos);
    logger.debug("========MEDICOS ADD"+medicos);
    Service.getInstance().atualizarMedicos(medicos);
    logger.debug("========MEDICOS UPDATE"+medicos);
    AuditoriaService.getInstance().gravarAcaoUsuario(getUserSessionMB().getLoggedUser(), "CADASTRO DE MÉDICO", "CADASTRO DE MÉDICO", "CADASTRO DE MÉDICO");

     } else if (EDITAR_STATE.equals(this.currentState)) {
         logger.debug(&quot;========EDITAR REGISTRO&quot;);
         Service.getInstance().atualizarMedicos(getMedicos());
         AuditoriaService.getInstance().gravarAcaoUsuario(getUserSessionMB().getLoggedUser(), &quot;EDITAR MÉDICO&quot;, &quot;EDITAR MÉDICO&quot;, &quot;EDITAR MÉDICO&quot;);
    
     }
     this.pesquisarMedicos();
    

    }
    public void excluir() {
    logger.debug("EXCLUIR REGISTRO");
    Service.getInstance().excluirMedicos(getMedicos());
    this.pesquisarMedicos();
    FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("teste"));
    AuditoriaService.getInstance().gravarAcaoUsuario(getUserSessionMB().getLoggedUser(), "APGAR MÉDICO", "APAGAR MÉDICO", "APAGAR MÉDICO");
    }

    public StreamedContent downloadReportPdf() {
    logger.debug("GERAR RELATORIO PDF");
    InputStream stream = ReportService.getInstance().emiteRelatorioMedicos(getListaMedicos(), ReportService.FORMATO_PDF);
    StreamedContent file = new DefaultStreamedContent(stream, "application/pdf", "report.pdf");
    FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("teste"));
    return file;
    }

[/code]

XHTML


                            &lt;h:outputText value="Especialidade"/&gt;
                            &lt;h:selectOneMenu value = "#{medicoMB.medicos.fkEspecialidade}" &gt;  
                            &lt;f:selectItem itemLabel = "SELECIONE" itemValue="" /&gt;   
                            &lt;f:selectItems value="#{medicoMB.listaEspecialidadeItems}"/&gt;   
                            &lt;/h:selectOneMenu&gt; 
                            

Não aparece nenhuma msg de erro?

obs.: da proxima vez coloca menos código. fica complicado olhar isso tudo.

Hebert Boa Tarde !

Usando convert, deu certinho, mas eu não quero usar essa MIZERA…

Este código aqui traz a mizera da especialidade para a FK

 @PostConstruct
    public void postConstruct() {
//COMBO especialidade
        setListaEspecialidade(Service.getInstance().listaEspecialidade());
        for (EspecialidadesBean sec : listaEspecialidade){
            this.getListaEspecialidadeItems().add(new SelectItem(sec.getPkEspecialidade(),sec.getEspecialidade()));
        }
}

no DESGRAÇADO DO COMBOBOX

&lt;h:outputText value="Especialidade"/&gt; &lt;h:selectOneMenu value = "#{medicoMB.medicos.fkEspecialidade}" &gt; &lt;f:selectItem itemLabel = "SELECIONE" itemValue="" /&gt; &lt;f:selectItems value="#{medicoMB.listaEspecialidadeItems}"/&gt; &lt;/h:selectOneMenu&gt;

GRABVAR

public void gravar() {
        logger.debug("===========gravando...============");
        if (ADICIONAR_STATE.equals(this.currentState)) {
               
Aqui eu teria que dizer que o valor selecionado vai ser a FK 

                //medicos.getFkEspecialidade();
                //medicos.setFkEspecialidade(especialidade);
                //especialidade.getMedicosList().add(medicos);

                Service.getInstance().cadastrarMedicos(medicos);
                Service.getInstance().atualizarMedicos(medicos);

..............................

Se eu selecionar alguma especialidade do combobox ele não salva e não da erro algum, se eu deixar vázio ele salva normalmente…

TA FODA…

Abraço.

Se você for selecionar o objeto você tem que usar o converter.

Se você não quer usar, ao invés de selecionar um objeto selecione o ID dele. Aí na ação de alterar/criar/excluir, você faz oq o converter faria que é carregar do banco de dados o objeto.

Não sei fazer não isso !

Pode mostra como é ?

Obrigado Pela ajuda…

flw.

olha ai.


[quote=juniorsatanas]Hebert Boa Tarde !

Usando convert, deu certinho, mas eu não quero usar essa MIZERA…

[/quote]

Só há duas opções:
1 - Usa o converter pra recuperar o objeto;
2 - Recupera o ID e usa pra pegar o objeto na mão.

package br.app.sisau.jsf;

import br.app.sisau.beans.EspecialidadesBean;
import br.app.sisau.beans.MedicosBean;
import br.app.sisau.security.RbacConstantes;
import br.app.sisau.security.service.SecurityService;
import br.app.sisau.service.AuditoriaService;
import br.app.sisau.service.ReportService;
import br.app.sisau.service.Service;
import java.io.InputStream;
import java.io.Serializable;
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.ManagedProperty;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import org.apache.log4j.Logger;
import org.primefaces.model.DefaultStreamedContent;
import org.primefaces.model.StreamedContent;

/**
 *
 * @author Jr.
 */
@ManagedBean(name = "medicoMB")
@ViewScoped
public class MedicoManagedBean implements Serializable {

    private static Logger logger = Logger.getLogger(MedicoManagedBean.class);
    private String pesquisa;
   
    //IMAGENS
    private String imagemPassword = "/images/icons/password.png";
    private String imagemEditarRegistro = "/images/icons/editar.png";
    private String imagemExcluirRegistro = "/images/icons/delete.png";
    private String imagemCriarRegistro = "/images/icons/add1.png";
    private boolean excluirRegistrosTerceiros;
    private boolean editarRegistrosTerceiros;
    private boolean criarRegistro;
    private boolean exibirRegistrosTerceiros;
   
    private static String ADICIONAR_STATE = "adicionar";
    private static String EDITAR_STATE = "editar";
    private String currentState = ADICIONAR_STATE;
    
    //COMBO
    private List&lt;MedicosBean&gt; listaMedicos = new ArrayList&lt;MedicosBean&gt;();
    private MedicosBean medicos = new MedicosBean();
    private List&lt;SelectItem&gt; listaMedicosItems = new ArrayList&lt;SelectItem&gt;();
    private int idMedicosSelecionada;
    
    //COMBO
    private List&lt;EspecialidadesBean&gt; listaEspecialidade = new ArrayList&lt;EspecialidadesBean&gt;();
    private EspecialidadesBean especialidade = new EspecialidadesBean();
    private List&lt;SelectItem&gt; listaEspecialidadeItems = new ArrayList&lt;SelectItem&gt;();
    private int idEspetcialidadeSelecionada;
    
    @ManagedProperty(value = &quot;#{userSessionMB}&quot;)
    private UserSessionManagedBean userSessionMB;

    public UserSessionManagedBean getUserSessionMB() {
        return userSessionMB;
    }

    public void setUserSessionMB(UserSessionManagedBean userSessionMB) {
        this.userSessionMB = userSessionMB;
    }

    @PostConstruct
    public void postConstruct() {

        listaMedicos = Service.getInstance().listarMerdicos();
        
        editarRegistrosTerceiros = SecurityService.getInstance().verificarPermissao(userSessionMB.getLoggedUser(), RbacConstantes.PESSOA_EDITAR_TERCEIROS);
        excluirRegistrosTerceiros = SecurityService.getInstance().verificarPermissao(userSessionMB.getLoggedUser(), RbacConstantes.PESSOA_EXCLUIR_TERCEIROS);
        criarRegistro = SecurityService.getInstance().verificarPermissao(userSessionMB.getLoggedUser(), RbacConstantes.PESSOA_CRIAR_REGISTRO);
        exibirRegistrosTerceiros = SecurityService.getInstance().verificarPermissao(userSessionMB.getLoggedUser(), RbacConstantes.PESSOA_EXIBIR_TERCEIROS);

        //COMBO especialidade
        setListaEspecialidade(Service.getInstance().listaEspecialidade());
        for (EspecialidadesBean sec : listaEspecialidade){
            listaEspecialidadeItems.add(new SelectItem(sec.getPkEspecialidade(),sec.getEspecialidade()));
        }
    }

    public boolean isAdicionarState() {
        return ADICIONAR_STATE.equals(this.getCurrentState());
    }

    public boolean isEditarState() {
        return EDITAR_STATE.equals(this.getCurrentState());
    
    }
    
    public void pesquisarMedicos() {
        listaMedicos = Service.getInstance().pesquisarMedicosCriteria(pesquisa);
   }
  
    public void prepareEditar() {
        this.setCurrentState(EDITAR_STATE);
        getListaMedicos().addAll(getListaMedicos());
        logger.debug(&quot;MEDICO---&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&quot; + medicos);
        logger.debug(&quot;CURRENTSTATES---&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&quot; +currentState);
    }
    
     public void clear() {
        this.medicos = new MedicosBean();
    }
     
    public void prepareAdicionar() {
        logger.debug(&quot;==========Preparando==========&quot;);
        this.setCurrentState(ADICIONAR_STATE);
        medicos = new MedicosBean();
        logger.debug(&quot;MEDICO---&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&quot; + medicos);
    
//        this.clear();
//        this.setCurrentState(ADICIONAR_STATE);
//        
        logger.debug(&quot;MEDICO---&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&quot; + medicos);
        logger.debug(&quot;CURRENTSTATES---&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&quot; +currentState);
    }

    public void gravar() {
        logger.debug(&quot;===========gravando...============&quot;);
        //this.setCurrentState(ADICIONAR_STATE);
        if (ADICIONAR_STATE.equals(this.currentState)) {
            logger.debug(&quot;========ADICIONAR REGISTRO&quot;+currentState);
            Service.getInstance().cadastrarMedicos(medicos);
            logger.debug(&quot;========MEDICOS ADD&quot;+medicos);
            Service.getInstance().atualizarMedicos(medicos);
            logger.debug(&quot;========MEDICOS UPDATE&quot;+medicos);
            AuditoriaService.getInstance().gravarAcaoUsuario(getUserSessionMB().getLoggedUser(), &quot;CADASTRO DE MÉDICO&quot;, &quot;CADASTRO DE MÉDICO&quot;, &quot;CADASTRO DE MÉDICO&quot;);

        } else if (EDITAR_STATE.equals(this.currentState)) {
            logger.debug(&quot;========EDITAR REGISTRO&quot;);
            Service.getInstance().atualizarMedicos(getMedicos());
            AuditoriaService.getInstance().gravarAcaoUsuario(getUserSessionMB().getLoggedUser(), &quot;EDITAR MÉDICO&quot;, &quot;EDITAR MÉDICO&quot;, &quot;EDITAR MÉDICO&quot;);

        }
        this.pesquisarMedicos();
    }
    public void excluir() {
        logger.debug(&quot;EXCLUIR REGISTRO&quot;);
        Service.getInstance().excluirMedicos(getMedicos());
        this.pesquisarMedicos();
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(&quot;teste&quot;));
                    AuditoriaService.getInstance().gravarAcaoUsuario(getUserSessionMB().getLoggedUser(), &quot;APGAR MÉDICO&quot;, &quot;APAGAR MÉDICO&quot;, &quot;APAGAR MÉDICO&quot;);
    }

    public StreamedContent downloadReportPdf() {
        logger.debug(&quot;GERAR RELATORIO PDF&quot;);
        InputStream stream = ReportService.getInstance().emiteRelatorioMedicos(getListaMedicos(), ReportService.FORMATO_PDF);
        StreamedContent file = new DefaultStreamedContent(stream, &quot;application/pdf&quot;, &quot;report.pdf&quot;);
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(&quot;teste&quot;));
        return file;
    }

    public static Logger getLogger() {
        return logger;
    }

    public static void setLogger(Logger aLogger) {
        logger = aLogger;
    }

    public String getPesquisa() {
        return pesquisa;
    }

    public void setPesquisa(String pesquisa) {
        this.pesquisa = pesquisa;
    }

    public String getImagemPassword() {
        return imagemPassword;
    }

    public void setImagemPassword(String imagemPassword) {
        this.imagemPassword = imagemPassword;
    }

    public String getImagemEditarRegistro() {
        return imagemEditarRegistro;
    }

    public void setImagemEditarRegistro(String imagemEditarRegistro) {
        this.imagemEditarRegistro = imagemEditarRegistro;
    }

    public String getImagemExcluirRegistro() {
        return imagemExcluirRegistro;
    }

    public void setImagemExcluirRegistro(String imagemExcluirRegistro) {
        this.imagemExcluirRegistro = imagemExcluirRegistro;
    }

    public String getImagemCriarRegistro() {
        return imagemCriarRegistro;
    }

    public void setImagemCriarRegistro(String imagemCriarRegistro) {
        this.imagemCriarRegistro = imagemCriarRegistro;
    }

    public boolean isExcluirRegistrosTerceiros() {
        return excluirRegistrosTerceiros;
    }

    public void setExcluirRegistrosTerceiros(boolean excluirRegistrosTerceiros) {
        this.excluirRegistrosTerceiros = excluirRegistrosTerceiros;
    }

    public boolean isEditarRegistrosTerceiros() {
        return editarRegistrosTerceiros;
    }

    public void setEditarRegistrosTerceiros(boolean editarRegistrosTerceiros) {
        this.editarRegistrosTerceiros = editarRegistrosTerceiros;
    }

    public boolean isCriarRegistro() {
        return criarRegistro;
    }

    public void setCriarRegistro(boolean criarRegistro) {
        this.criarRegistro = criarRegistro;
    }

    public boolean isExibirRegistrosTerceiros() {
        return exibirRegistrosTerceiros;
    }

    public void setExibirRegistrosTerceiros(boolean exibirRegistrosTerceiros) {
        this.exibirRegistrosTerceiros = exibirRegistrosTerceiros;
    }

    public String getCurrentState() {
        return currentState;
    }

    public void setCurrentState(String currentState) {
        this.currentState = currentState;
    }

    public List&lt;MedicosBean&gt; getListaMedicos() {
        return listaMedicos;
    }

    public void setListaMedicos(List&lt;MedicosBean&gt; listaMedicos) {
        this.listaMedicos = listaMedicos;
    }

    public MedicosBean getMedicos() {
        return medicos;
    }

    public void setMedicos(MedicosBean medicos) {
        this.medicos = medicos;
    }

    public List&lt;SelectItem&gt; getListaMedicosItems() {
        return listaMedicosItems;
    }

    public void setListaMedicosItems(List&lt;SelectItem&gt; listaMedicosItems) {
        this.listaMedicosItems = listaMedicosItems;
    }

    public int getIdMedicosSelecionada() {
        return idMedicosSelecionada;
    }

    public void setIdMedicosSelecionada(int idMedicosSelecionada) {
        this.idMedicosSelecionada = idMedicosSelecionada;
    }

     public void setListaEspecialidade(List&lt;EspecialidadesBean&gt; listaEspecialidade) {
        this.listaEspecialidade = listaEspecialidade;
    }

    public List&lt;SelectItem&gt; getListaEspecialidadeItems() {
        return listaEspecialidadeItems;
    }

    public void setListaEspecialidadeItems(List&lt;SelectItem&gt; listaEspecialidadeItems) {
        this.listaEspecialidadeItems = listaEspecialidadeItems;
    }

    public EspecialidadesBean getEspecialidade() {
        return especialidade;
    }

    public void setEspecialidade(EspecialidadesBean especialidade) {
        this.especialidade = especialidade;
    }

    public int getIdEspetcialidadeSelecionada() {
        return idEspetcialidadeSelecionada;
    }

    public void setIdEspetcialidadeSelecionada(int idEspetcialidadeSelecionada) {
        this.idEspetcialidadeSelecionada = idEspetcialidadeSelecionada;
    }
    
    public void especSelec(){
        logger.debug("Validando combo.....");
        EspecialidadesBean espec = new EspecialidadesBean();
        espec.setPkEspecialidade(idEspetcialidadeSelecionada);
        if(listaEspecialidade.contains(espec)){
            int index = listaEspecialidade.indexOf(espec);
            especialidade = listaEspecialidade.get(index);
            medicos.setFkEspecialidade(especialidade);
        }
    }
}