Primefaces + SelectOneMenu - ajuda
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
Meu Managed Bean
Só lembrando um detalhe, antes de usar o p:selectOneMenu, estava usando um inputText... e gravava normalmente.
Alguem pode me ajudar??
ABraços
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
Curtidas 0
Respostas
Paulo Henrique
25/01/2013
Bom dia amigo,
Poderia postar teu código com o inputtext pra gente poder avaliar juntos?
Poderia postar teu código com o inputtext pra gente poder avaliar juntos?
GOSTEI 0
Thiago Lopes
25/01/2013
mas o OneMenu, esta exibindo as opções corretamente?
GOSTEI 0
Jilles Ragonha
25/01/2013
sim, ele exibe todos os itens do banco perfeitamente.
Código anterior que funcionava
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
25/01/2013
Ta usando jsf 2? com primefaces????
GOSTEI 0
Wisley Souza
25/01/2013
kd o converter???
GOSTEI 0
Jilles Ragonha
25/01/2013
opa galera, resolvi, na verdade foi soh pegar o valor String do objeto e foi suave
:D
obrigado povo
:D
obrigado povo
GOSTEI 0
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
25/01/2013
Amigo, me da uma força, eu to passando pela mesma dificuldade, o meu converter está conforme abaixo:
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:
Alguma sugestão????
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
25/01/2013
Poste o código do ManagedBean. E se possível, a stack inteira da exceção.
GOSTEI 0
José
25/01/2013
Como a duvida inicial já foi solucionada. Estou finalizando este tópico.
GOSTEI 0