Primefaces + SelectOneMenu - ajuda

25/01/2013

9

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
Responder

Posts

25/01/2013

Paulo Henrique

Bom dia amigo,

Poderia postar teu código com o inputtext pra gente poder avaliar juntos?
Responder

25/01/2013

Thiago Lopes

mas o OneMenu, esta exibindo as opções corretamente?
Responder

25/01/2013

Jilles Ragonha

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()}" />
Responder

25/01/2013

Wisley Souza

Ta usando jsf 2? com primefaces????
Responder

25/01/2013

Wisley Souza

kd o converter???
Responder

26/01/2013

Jilles Ragonha

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

obrigado povo
Responder

28/01/2013

Wisley Souza

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

13/06/2013

Victorsouza

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????
Responder

15/06/2013

Marcelo Senaga

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

29/09/2013

José

Como a duvida inicial já foi solucionada. Estou finalizando este tópico.
Responder