Pessoal estou fazendo um trabalho na facul e pintou um problema, junto veio a duvida.
O cenario e o seguinte,
tenho alguns botoes na tela com os respectivos "action" para persistir na base, mas toda vez quando coloco a url no browser e aperto enter esses métodos sao chamados retornando problemas.
segue um exemplo:
<p:commandButton value="Adicionar Tipo de Quarto"
action="#{hotelManagedBean.saveTipoQuarto()}"
update="frmGeral, messages, dtDVDs"/>
Pessoal estou fazendo um trabalho na facul e pintou um problema, junto veio a duvida.
O cenario e o seguinte,
tenho alguns botoes na tela com os respectivos "action" para persistir na base, mas toda vez quando coloco a url no browser e aperto enter esses métodos sao chamados retornando problemas.
segue um exemplo:
<p:commandButton value="Adicionar Tipo de Quarto"
action="#{hotelManagedBean.saveTipoQuarto()}"
update="frmGeral, messages, dtDVDs"/>
O que eu queria mesmo é que o action fosse chamado apenas quando eu clicasse no botão.
Como funciona esse ciclo de chamadas?
Não sei se estou sendo claro, mas qualquer duvida estou a disposiçao para maior esclarecimento
Abraço a todos
Primeiramente, eu acho que o commandButton é do html então a biblioteca que você deve utilizar h: e não p, não pode colocar parenteses no action e o update não existe( minha opinião).
A linha do html ficaria assim:
<h:commandButton value="Adicionar Tipo de Quarto" action="#{hotelManagedBean.saveTipoQuarto}" />
Não entendi muito bem o que você quer fazer, pode me explicar melhor?
att,
André Vieira.
manolo
Olá Andr?de Souza Vieira
Então, estou usando o primefaces por isso da tag <p:commandbutton>.
Toda vez que acesso minha aplicação, ou seja, digito meu endereço na URL vários métodos são chamados antes da renderização da pagina, entre eles estao os commandbutton. Como se pode fazer para tais metodos serem chamados apenas quando clicamos nos mesmo?
Vlww pela ajuda bro
Abraço
T
TJvargas
Ao invés de
<p:commandButton value="Adicionar Tipo de Quarto"
action="#{hotelManagedBean.saveTipoQuarto()}"
update="frmGeral, messages, dtDVDs"/>
Tenta fazer assim
<p:commandButton value="Adicionar Tipo de Quarto"
action="#{hotelManagedBean.saveTipoQuarto}"
update="frmGeral, messages, dtDVDs"/>
A princípio eu não entendi o que você quer dizer, mas os botões não executam as actions sozinhos (ao carregar a página).
manolo
Olá TjVargas!!
Tentei fazer a sua sugestão, mas infelizmente não rolou.
acontece que toda vez que e feito alguma requisição na url os metodos são chamados. Sera que e alguma coisa relacionada ao escopo do MB?
T
TJvargas
Ao carregar a página são chamados apenas os gets dos atributos que estais necessitando no momento;
Vc tem certeza que são as actions dos botões que são executadas? Se sim, como você chegou a essa conclusão?
A princípio o escopo não interfere nisso…
Qualquer coisa mostra seu código até o form
A
Andr_de_Souza_Vieira
manolo:
Olá Andr?de Souza Vieira
Então, estou usando o primefaces por isso da tag <p:commandbutton>.
Toda vez que acesso minha aplicação, ou seja, digito meu endereço na URL vários métodos são chamados antes da renderização da pagina, entre eles estao os commandbutton. Como se pode fazer para tais metodos serem chamados apenas quando clicamos nos mesmo?
Vlww pela ajuda bro
Abraço
Está utilizando JSF?
Em JSF eu ia fazer desta forma…
@ManagedBeanpublicclassTesteBean{privateStringnome;privateintidade;publicvoidimprimeNome(){System.out.println("O nome digitado foi: "+nome);}publicvoidimprimeIdade(){System.out.println("A idade digitada foi: "+idade);}// getters e setters// HTML [...]<h:body><f:view><h:form><h:inputTextvalue="#{testeBean.nome}"><h:commandButtonvalue="Enviar nome"action="#{testeBean.imprimeNome}"/>// O botão apenas executará a ação do método imprimeNome que fica no bean. <h:inputTextvalue="#{testeBean.idade}"><h:commandButtonvalue="Enviar idade"action="#{testeBean.imprimeIdade}"/>// O botão apenas executará a ação do método imprimeIdade que fica no bean. </h:form></f:view></h:body>[...]
Eu faria desta forma, claro que está muito simples…
Se for outra coisa, acho que fugirá do meu conhecimento,
Mas você alguém do forum pra te ajudar…
Att,
André Vieira.
manolo
Entendo…
Foi desta forma mesmo que eu fiz, ou seja, seguinto as mesmas diretrizes.
O problema é que na hora que eu vou debugar todos os metodos com actions na pagina sao chamados no momento da renderização no navegador, isto acaba gerando problemas.
AmauriSpPoa
Manolo, me corrija se eu estiver errado, mas o que você quer é que o método só seja chamado no click e não com o enter.
Se for isso mesmo, temos um pequeno problema, na Web enter sempre submete o formulário, oque você pode fazer é uma função javascript que intercepte o enter e impeça o submit do form.
Se não for isso, desconsidere.
T
TJvargas
Amauri, o problema dele era a action do botão ser “executada” no load da página.
Por ironia tive, talvez, o mesmo problema hoje. O “action” do meu botão estava executando no load da página. Depois que fui ver eu tinha um atributo com nome igual a da action, por isso o engano, no caso eu tinha um atributo login, e uma action tbm chamada login; só mudei para o correto doLogin, e já era o problema. Pois na verdade ele estava apenas tentado ler o atributo login.
O action possui regras de navegacao, por isso retorna uma String, que é um outcome mapeado no faces-config,
ou o caminho para uma view, no caso ‘index.xhtml’. Se usar JSF 2, nao precisa mapear no faces-config.
actionListener:
public void save(){
//salva
}
O actionListener não navega x]
Uma rápida pesquisa no google, consegue encontrar artigos e foruns sobre este assunto: action/actionListener.
Outra coisa, qual versao do prime? pq tem o ajax=true que é nativo na ultima versao… mas n sei se isto existia nas anteriores …
T
TJvargas
d34d_d3v1l… seu post foi completamente fora do contexto do tópico hehe.
O problema do cara era a ação do botão executada automaticamente no load da página, sem precisar clicar; Mas se ver o meu post, já encontrei uma possível causa do problema;
d34d_d3v1l
TJvargas:
d34d_d3v1l… seu post foi completamente fora do contexto do tópico hehe.
O problema do cara era a ação do botão executada automaticamente no load da página, sem precisar clicar; Mas se ver o meu post, já encontrei uma possível causa do problema;