Chamada de metodo com action

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"/>

MB:

[code] public void saveTipoQuarto() {
TipoQuartoController tipoQuartoController = new TipoQuartoController(this.entityManager);
tipoQuartoController.save(this.tipoQuarto);

	this.tipoQuarto = new TipoQuarto();
	this.listaTipoQuartos = null;
}[/code]

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

[quote=manolo]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"/>

MB:

[code] public void saveTipoQuarto() {
TipoQuartoController tipoQuartoController = new TipoQuartoController(this.entityManager);
tipoQuartoController.save(this.tipoQuarto);

	this.tipoQuarto = new TipoQuarto();
	this.listaTipoQuartos = null;
}[/code]

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[/quote]

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.

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

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).

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?

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

[quote=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[/quote]

Está utilizando JSF?

Em JSF eu ia fazer desta forma…

@ManagedBean
public class TesteBean{

private String nome;
private int idade;  

public void imprimeNome()
{
    System.out.println("O nome digitado foi: " +nome); 
}
public void imprimeIdade()
{
   System.out.println("A idade digitada foi: " +idade); 
}

// getters e setters

// HTML 
[...]
<h:body> 
   <f:view>
              <h:form>
                            <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. 
              </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.

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.

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.

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.

uai

para mim:

action:

public String salvar(){
   //salva
   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.

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 …

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=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]

pqp… me desculpem pessoal!
:frowning: