Bão, estou com um erro estranho ....
Tenho um commandobutton em uma tela que chama um Método em um Bean, até nada de anormal, o problema é quando tentei criar outro commandbutton e não consigo chamar o método e estou tendo esse problema com alguns botões de minha tela, alguem ja passou por isso ??
publicvoidadicionaCurso(){CursoRepositorycr=newCursoRepository(getEntityManager());curso.setFuncionario(getFuncionario());curso.setDataCadastro(newDate());curso.setHoraCadastro(newDate());curso.setUsuarioCadastro(getUsuarioSessao());System.out.println("ANTES DE GRAVAR");cr.gravar(curso);System.out.println("DEPOIS DE GRAVAR");curso=newCurso();cursoPorFuncionario();}
Provavelmente há algum erro na criação dos componentes da tela que está impedindo os botões de executarem suas ações.
Usando o firebug (ou similar) você consegue depurar e ver onde é o erro.
D
Diego_Adriano
Certo, no Firebug ele me traria o Id do componente que não esta sendo “criado” ?
D
drsmachado
Não, você precisa ver o que está ocorrendo de errado na renderização dos componentes.
D
Diego_Adriano
Certo … vou ver o que consigo aqui …
D
Diego_Adriano
Bem, instalei ele aqui … não sei usa-lo então não sei como analisar os resultados das ferramentas … Mas vi que quando executo o botão as informações dos campos estão carregadas …
Pois bem, vc saberia me dizer “o que” preciso procurar ?
Quando você clica em um p:commandButton ou num p:commandLink ele espera que todos os elementos da página estejam de acordo.
Pode ser que algum deles necessite de um converter (ou espere um converter), pode ser que algum deles esteja vazio e não deveria estar vazio.
Há muitas possibilidades.
O que você precisa tentar é identificar algo que esteja fora do normal.
I
igor_ks
Tenta deixa o ajax=“false” pra ver
D
Diego_Adriano
Certo, vamos lá então.
Quanto ao converter não uso nada nessa página que necessite dele.
Existem alguns campos “obrigatórios” mas eles já estão preenchidos.
Pensando por esse lado, o uso do Immediate=true já deveria resolver não acha ? Ou estou falando besteira ?
D
Diego_Adriano
Com ajax false tb não vai e tb não quero que seja rendenizada a tela toda …
T
TJvargas
Não vi na sua demonstração o commandButton dentro de um h:form amigo…
D
Diego_Adriano
vou postar o código todo !! Detalhe: esse é o commandbutton que funfa !!
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"xmlns:ui="http://java.sun.com/jsf/facelets"xmlns:h="http://java.sun.com/jsf/html"xmlns:f="http://java.sun.com/jsf/core"xmlns:p="http://primefaces.org/ui"xmlns:pe="http://primefaces.org/ui/extensions"><h:formid="formFormacao"prependId="false"><p:accordionPanel><p:tabtitle="Formulário"id="tabFormacoes"><h:panelGridcolumns="2"columnClasses="colunaEsquerda,colunaDireita"><h:outputTextvalue="Curso: "/><p:inputTextvalue="#{funcionarioBean.formacao.curso}"size="50"onkeydown="this.value = this.value.toUpperCase();"id="nomeFormacao"/><h:outputTextvalue="Instituição: "/><p:inputTextvalue="#{funcionarioBean.formacao.instituicao}"size="75"onkeydown="this.value = this.value.toUpperCase();"id="instituicaoFormacao"/><h:outputTextvalue="Situação: "/><p:selectOneMenuvalue="#{funcionarioBean.formacao.situacao}"id="situacaoFormacao"><f:selectItemitemLabel="Escolha "itemValue=""/><f:selectItemitemLabel="Cursando"itemValue="C"/><f:selectItemitemLabel="Concluído"itemValue="F"/></p:selectOneMenu><h:outputTextvalue="Início: "/><p:calendarvalue="#{funcionarioBean.formacao.dataInicio}"size="10"pattern="dd/MM/yyyy"locale="pt_BR"id="inicioFormacao"/><h:outputTextvalue="Conclusão: "/><p:calendarvalue="#{funcionarioBean.formacao.dataConclusao}"size="10"pattern="dd/MM/yyyy"locale="pt_BR"id="conclusaoFormacao"/><p:commandButtonvalue="Salvar"ajax="false"update="formFormacao"immediate="true"id="btnSalvarFormacao"actionListener="#{funcionarioBean.adicionaFormacao}"icon="ui-icon ui-icon-disk"/><p:commandButtonvalue="Limpar"update="formFormacao"action="#{funcionarioBean.limparFormacao}"icon="ui-icon ui-icon-trash"immediate="true"process="@this"id="btnLimparFormacao"><pe:resetEditableValuesfor="formFormacao"/></p:commandButton></h:panelGrid></p:tab></p:accordionPanel></h:form></html>
Amigo, tira o immediate e no seu método adicionaCurso coloca assim na declaração dele:
public void adicionaCurso(ActionEvent event){
//Seu Código Aqui
}
D
Diego_Adriano
Infelizmente a mesma coisa !!!
T
TJvargas
vai estreitando seu problema até ter certeza do que é.
Já colocou a action desse botão que não funciona num desses botões que funcionam e viu o que acontece?
Já debugou o método para ver se o botão está realmente chamando ele?
Já olhou no console do firebug o que ele diz quando vc clica no botão?
D
Diego_Adriano
Então … Esse command que chama o método, ele chama qualquer um que eu ligar nele, quanto que os outros não, ele não chama …
T
TJvargas
Vc está querendo dizer, que quando vc coloca sua action
nos botões salvar ou limpar e ele não entra no método. é isso?
e quanto ao firebug, o que ele diz?
D
Diego_Adriano
Não cara … assim, vou tentar explicar melhor …
Naquele formulário de Formações, tem um commandbutton que chama qualquer método que eu ligar nele …
Porém eu tenho outros formulários com outros commandbutton que NÃO chamam os métodos … Porém, se eu ligar esses métodos que não são chamados ao command que esta no Formulário de Formações o método é chamado !!
O
oldave
cara, eu tive um problema do tipo
tua pagina, ta tentando carregar uma outra pagina no meio de uma principal? ou algo assim?
exemplo: clica numa opção do menu e depois aparece a outra pagina no centro da principal?
se sim, tenta executar só essa pagina que vai ser carregada no meio e testa se teu botao vai funcionar.
se funcionar, cria um template pra ser a pagina principal, foi o que eu fiz.
lembre - se de usar um form por pagina, e verifique se vc esta nao esta passando um valor diferente para bean por exemplo um campo int no <p:inputMask
O
oldave
esse é o problema
por isso que eu falei pra ele criar o template, pq se ele simplesmente chamar uma pagina dentro da outra, vai ter mais de um form
e isso vai da problema
bom criar o template. Bota um system.out.print desse metodo e executa essa página isoladamente…ve se aparece no console o print
D
Diego_Adriano
Bem, eu tenho um Tamplate principal, onde é já vem com o Menu carregado, então deixo o "Center" para ser carregadas outras páginas ... Realmente, por questão de ficar mais "prática" a manutenção, usei um TabView e as Abas chamam outras páginas ... assim:
Página "funcionario.xhtml" ela "chama" o tamplate:
<!--@@@@@@@@@@@@ CARREGA TELA DE GRADUAÇÃO @@@@@@@@@@@@@@--><p:tabtitle="Formações"id="tabFormacao"rendered="#{funcionarioBean.funcionario.id != null}"><ui:includesrc="/pages/formacao/formacao.xhtml"/></p:tab><!--@@@@@@@@@@@@ CARREGA TELA DE PÓS GRADUAÇÃO @@@@@@@@@@@@@@--><p:tabtitle="Pós Graduações"id="tabPos"rendered="#{funcionarioBean.funcionario.id != null}"><ui:includesrc="/pages/formacao/posgraduacao.xhtml"/></p:tab><!--@@@@@@@@@@@@ CARREGA TELA DE CURSOS/PALESTRAS @@@@@@@@@@@@@@--><p:tabtitle="Cursos - Palestras"id="tabCurso"rendered="#{funcionarioBean.funcionario.id != null}"><ui:includesrc="/pages/formacao/cursos.xhtml"/></p:tab>
Porém o botão que esta dentro da pagina Formação funciona e os que estão nas demais não ... Porém se eu ligar o botão da pag formação no método da que deveria ser chamado pela pag Pós ele funfa ...
Vou testar como sugeriram ...
D
Diego_Adriano
Não funfou com o type !!
O
oldave
testa botar essa pagina que n ta funcionando, fora do template, cria ela isolada deixa feia mesmo, coisa rapida e testa o botao dela
D
Diego_Adriano
Bem, fiz um teste assim:
Peguei o formulário de Pós e joguei dentro da página do Funcionário, e o método foi chamado …
Agora … sera que pode ser erro na forma que estou “chamando” essa outra página [url]?
D
Diego_Adriano
Realmente eu devo estar com algum problema “grande” na página ou no Bean, pois agora tenho esse Erro:
O objeto não esta sendo preenchido com os dados do formulário e como os atributos da classe estão anotados como “@Column(nullable=false)” ocorro esse erro …
Que zebra viu …