Chamada de metodo com action - Front-end - GUJ
Chamada de metodo com action
manolo Novembro 15, 2012, 10:13pm #1
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.
<p:commandButton value="Adicionar Tipo de Quarto" action="#{hotelManagedBean.saveTipoQuarto()}" update="frmGeral, messages, dtDVDs"/>
[code]	public void saveTipoQuarto() {
TipoQuartoController tipoQuartoController = new TipoQuartoController(this.entityManager);
tipoQuartoController.save(this.tipoQuarto);
this.tipoQuarto = new TipoQuarto();
this.listaTipoQuartos = null;
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
Andr_de_Souza_Vieira Novembro 15, 2012, 10:48pm #2
[quote=manolo]Pessoal estou fazendo um trabalho na facul e pintou um problema, junto veio a duvida.
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?
manolo Novembro 15, 2012, 11:06pm #3
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
TJvargas Novembro 15, 2012, 11:26pm #4
<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 Novembro 15, 2012, 11:33pm #5
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?
TJvargas Novembro 15, 2012, 11:40pm #6
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
Andr_de_Souza_Vieira Novembro 15, 2012, 11:40pm #7
[quote=manolo]Olá Andr?de Souza Vieira
Está utilizando JSF?
Em JSF eu ia fazer desta forma…
public class TesteBean{
System.out.println("O nome digitado foi: " +nome);
public void imprimeIdade()
System.out.println("A idade digitada foi: " +idade);
<h:inputText value="#{testeBean.nome}">
<h:commandButton value="Enviar nome" action="#{testeBean.imprimeNome}" />
// O botão apenas executará a ação do método imprimeNome que fica no bean.
<h:inputText value="#{testeBean.idade}">
<h:commandButton value="Enviar idade" action="#{testeBean.imprimeIdade}" />
// O botão apenas executará a ação do método imprimeIdade que fica no bean.
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…
manolo Novembro 15, 2012, 11:47pm #8
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 Novembro 16, 2012, 8:58am #9
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.
TJvargas Novembro 18, 2012, 2:20am #10
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.
d34d_d3v1l Novembro 18, 2012, 9:53am #11
return "/view/entidade/index";
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.
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 …
TJvargas Novembro 18, 2012, 11:39am #12
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 Novembro 18, 2012, 2:13pm #13
[quote=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;[/quote]