Primefaces + SelectOneMenu - ajuda

Java

25/01/2013

Olá pessoal, estou tendo um problema com meu selectOneMenu.

Seguinte, ele esta fazendo a conexao e listando corretamente os itens do banco de dados.
Agora eu não estou conseguindo entrar no método de salvar do meu MB.
Não aparece mensagem de erro, nao aparece exceção, simplesmente não faz nada.

Segue o código XHTML

  <ui:composition template="/template/template.xhtml">
        <ui:define name="conteudo">
            <p:panel id="painelCadastroChars" header="#{msgs.CHAR_TITULO_PAINEL}" >
                <h:panelGrid columns="3">

                    <h:outputLabel value="#{msgs.CHAR_NOME}"/>
                    <p:inputText id="txtNomeChar" value="#{personagemMB.personagem.nome}" required="true" requiredMessage="#{msgs.CAMPO_VAZIO}"/> 
                    <p:message for="txtNomeChar" />

                    <h:outputLabel  value="#{msgs.CHAR_CLASSE}"/>
                    <p:selectOneMenu id="classe" value="#{personagemMB.personagem.classe}"  >
                        <f:selectItem itemLabel="Select" itemValue=""/>
                        <f:selectItems value="#{personagemMB.listarClasses()}" var="classes" itemLabel="#{classes.nome}" itemValue="#" />
                    </p:selectOneMenu> 
                    <p:message for="classe" />

                    <h:outputLabel  value="#{msgs.CHAR_SEXO}"/>
                    <p:inputText  id="sexo" value="#{personagemMB.personagem.sexo}" required="true" requiredMessage="#{msgs.CAMPO_VAZIO}"/> 
                    <p:message for="sexo" />

                    <h:outputLabel  value="#{msgs.CHAR_RACA}"/>
                    <p:inputText  id="raca" value="#{personagemMB.personagem.raca}" required="true" requiredMessage="#{msgs.CAMPO_VAZIO}"/> 
                    <p:message for="raca" />

                    <h:outputLabel  value="#{msgs.CHAR_LEVEL}"/>
                    <p:inputText  id="level" value="#{personagemMB.personagem.level}" required="true" requiredMessage="#{msgs.CAMPO_VAZIO}"/> 
                    <p:message for="level" />

                </h:panelGrid>
                <p:commandButton id="btnCadastrar" value="#{msgs.CADASTRO_BOTAO_SALVAR}" action="#{personagemMB.salvarPersonagem()}" />



Meu Managed Bean
@ManagedBean
@RequestScoped
public class PersonagemMB implements Serializable{
    private Personagem personagem = new Personagem();
    private List<Classe> classes = new ArrayList<Classe>();
    private PersonagemDAO dao = new PersonagemDAO();

    public List<Classe> getClasses() {
        return classes;
    }

    public void setClasses(List<Classe> classes) {
        this.classes = classes;
    }

    public PersonagemDAO getDao() {
        return dao;
    }

    public void setDao(PersonagemDAO dao) {
        this.dao = dao;
    }
    
    public Personagem getPersonagem() {
        return personagem;
    }

    public void setPersonagem(Personagem personagem) {
        this.personagem = personagem;
    }
    
    public boolean salvarPersonagem(){
        return dao.salvar(personagem);
    }
    
    public List<Classe> listarClasses(){
        classes = dao.listarClasses();
        return classes;
    }



Só lembrando um detalhe, antes de usar o p:selectOneMenu, estava usando um inputText... e gravava normalmente.
Alguem pode me ajudar??
ABraços
Jilles Ragonha

Jilles Ragonha

Curtidas 0

Respostas

Paulo Henrique

Paulo Henrique

25/01/2013

Bom dia amigo,

Poderia postar teu código com o inputtext pra gente poder avaliar juntos?
GOSTEI 0
Thiago Lopes

Thiago Lopes

25/01/2013

mas o OneMenu, esta exibindo as opções corretamente?
GOSTEI 0
Jilles Ragonha

Jilles Ragonha

25/01/2013

sim, ele exibe todos os itens do banco perfeitamente.

Código anterior que funcionava

 <!--Página responsável pelo cadastro dos personagens do jogador -->
    <ui:composition template="/template/template.xhtml">
        <ui:define name="conteudo">
            <p:panel id="painelCadastroChars" header="#{msgs.CHAR_TITULO_PAINEL}" >
                <h:panelGrid columns="3">

                    <h:outputLabel value="#{msgs.CHAR_NOME}"/>
                    <p:inputText id="txtNomeChar" value="#{personagemMB.personagem.nome}" required="true" requiredMessage="#{msgs.CAMPO_VAZIO}"/> 
                    <p:message for="txtNomeChar" />

                    <h:outputLabel  value="#{msgs.CHAR_CLASSE}"/>
                    <p:inputText id="classe" value="#{personagemMB.personagem.classe}" required="true" />
                    <p:message for="classe" />

                    <h:outputLabel  value="#{msgs.CHAR_SEXO}"/>
                    <p:inputText  id="sexo" value="#{personagemMB.personagem.sexo}" required="true" requiredMessage="#{msgs.CAMPO_VAZIO}"/> 
                    <p:message for="sexo" />

                    <h:outputLabel  value="#{msgs.CHAR_RACA}"/>
                    <p:inputText  id="raca" value="#{personagemMB.personagem.raca}" required="true" requiredMessage="#{msgs.CAMPO_VAZIO}"/> 
                    <p:message for="raca" />

                    <h:outputLabel  value="#{msgs.CHAR_LEVEL}"/>
                    <p:inputText  id="level" value="#{personagemMB.personagem.level}" required="true" requiredMessage="#{msgs.CAMPO_VAZIO}"/> 
                    <p:message for="level" />

                </h:panelGrid>
                <p:commandButton id="btnCadastrar" value="#{msgs.CADASTRO_BOTAO_SALVAR}" action="#{personagemMB.salvarPersonagem()}" />
GOSTEI 0
Wisley Souza

Wisley Souza

25/01/2013

Ta usando jsf 2? com primefaces????
GOSTEI 0
Wisley Souza

Wisley Souza

25/01/2013

kd o converter???
GOSTEI 0
Jilles Ragonha

Jilles Ragonha

25/01/2013

opa galera, resolvi, na verdade foi soh pegar o valor String do objeto e foi suave
:D

obrigado povo
GOSTEI 0
Wisley Souza

Wisley Souza

25/01/2013

Que bom que resolveu, mas acho que seria mais fácil ter feito um converter genérico!!!
GOSTEI 0
Victorsouza

Victorsouza

25/01/2013

Amigo, me da uma força, eu to passando pela mesma dificuldade, o meu converter está conforme abaixo:
package financeiro.web.converter;

import financeiro.area.*;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.*;

@FacesConverter(value="areaConverter")
public class AreaConverter implements Converter{

    @Override
      public Object getAsObject(FacesContext context,UIComponent componente, String value) throws ConverterException {  
        
        String texto = value.toString();
        AreaRN tp=new AreaRN();
        
       
        Integer codigo = Integer.valueOf(texto);
                FacesContext.getCurrentInstance().addMessage("consulta:id",  
                new FacesMessage(" Codigo da Area Selecionada: "+codigo)); 

        return tp.carregar(codigo);
       
    }  

    @Override
    public String getAsString(FacesContext context, UIComponent component, Object value) {  

            FacesContext.getCurrentInstance().addMessage("consulta:id",  
                new FacesMessage(" Valor convertido: "+String.valueOf(value))); 
            
            return String.valueOf(value);
        
    } 

}


Mas quando submeto o formulario, me apresenta a mensagem:

edicao:area: Erro de validação: o valor não é válido

Sei que o problema está nessa conversão de tipos, pois eu pego dados direto da classe Area para formar meu select:


            <h:selectOneMenu id="area" value="#{experimentoBean.selecionado.area}" converter="areaConverter">
               <f:selectItems value="#{areaBean.areas}" var="t"  
                               itemValue="#" itemLabel="#{t.description}" />   
            </h:selectOneMenu>



Alguma sugestão????
GOSTEI 0
Marcelo Senaga

Marcelo Senaga

25/01/2013

Poste o código do ManagedBean. E se possível, a stack inteira da exceção.
GOSTEI 0
José

José

25/01/2013

Como a duvida inicial já foi solucionada. Estou finalizando este tópico.
GOSTEI 0
POSTAR