Form está sempre sendo submetido

10 respostas
S

Boa tarde galera,

Estou com o seguinte problema, toda vez que clico no meu h:commandButton, o h:form está sendo submetido, com isso ele rerenderiza toda a página.
Já tentei usar o f:ajax para fazer o botão rerenderizar somente um dos componentes.
É um código de estudo apenas, que estou tentando fazer com o JSF 2.0.
Agradeço desde já.

Segue o código:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:f="http://java.sun.com/jsf/core"      
      xmlns:h="http://java.sun.com/jsf/html">
 <head>
 	<title>teste</title>
 </head>
    <h:body>
    	<h:form>
    		<h:commandButton id="butaoNome" action="#{myBean.exmetodo}" value="teste">
    		</h:commandButton>
    		<h:outputText id="nome1" value="#{myBean.nome1}" />
    		<h:outputText id="nome2" value="#{myBean.nome2}" />
    	</h:form>
    </h:body>
</html>

e...

package br.com.teste.managedBeans;
 
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
 
@ManagedBean(name="myBean")
@RequestScoped
public class myBean{
 

	private String nome1="";
	private String nome2="";
	
	public void exmetodo() {
		nome1 = "aaa";
		nome2 = "bbb";
		System.out.println("teste hello world");
	}

	public String getNome1() {
		return nome1;
	}

	public void setNome1(String nome1) {
		this.nome1 = nome1;
	}

	public String getNome2() {
		return nome2;
	}

	public void setNome2(String nome2) {
		this.nome2 = nome2;
	}
	
}

10 Respostas

LaercioPontin

Isso é com ajax mesmo, você fez como?

S

O código é este mesmo, sem ajax.
Quando eu tentei usar o <f:ajax> e chamar o método através dele da seguinte maneira:

<h:commandButton id="butaoNome" value="teste"> <f:ajax execute="@this" listener="#{myBean.exmetodo}"/> </h:commandButton>

Ele não chama o método :S

LaercioPontin
tenta assim:
<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"   
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
<html xmlns="http://www.w3.org/1999/xhtml"  
      xmlns:f="http://java.sun.com/jsf/core"        
      xmlns:h="http://java.sun.com/jsf/html">  
<head>  
    <title>teste</title>  
</head>  
    <h:body>  
        <h:form>  
            <h:commandButton id="butaoNome" action="#{myBean.exmetodo}" value="teste">  
                  <f:ajax rendered="form:nome1"  listener="#{myBean.exmetodo}"/>
            </h:commandButton>  
            <h:outputText id="nome1" value="#{myBean.nome1}" />  
            <h:outputText id="nome2" value="#{myBean.nome2}" />  
        </h:form>  
    </h:body>  
</html>

como estou fora de meu comp. , não tenho certeza que seja rendered, ou update... mas é um dos dois o atributo a ser usado.
Ver ai se funfa

S

O nome é “render”, mas ainda sim não funciona. E também fiquei na dúvida de onde colocar a chamada do método, vc colocou no ajax, e no botão.
Eu descobri como fazer o botão não dar submit, tenho que colocar type=“button”, mas quando faço isso ele nem seque chama o método.

Hebert_Coelho

Ao chamar o Ajax passando o @this você envia o botão.

Passe apenas quem você quer renderizar. Coloque um id em um input por exemplo e nele será exibido o que você quer.

S

Coloquei o seguinte código agora:

<h:form prependId="false" onsubmit="alert('123')" > <h:commandButton id="butaoNome" action="#{myBean.exmetodo}" value="#{myBean.nomeBotao}" > <f:ajax execute="nome1" render="nome1"></f:ajax> </h:commandButton> <h:outputText id="nome1" value="#{myBean.nome1}" /> <h:outputText id="nome2" value="#{myBean.nome2}" /> </h:form>

Ele chama o método, porem ele reRenderiza o nome1 e o nome2, e também da um submit no Form.
Se eu coloco o “type=button”, no commandButton, ele não da um submit, porém ele não chama o método.

:S

Hebert_Coelho

Tira o execute e deixa apenas o render.

<f:ajax execute="nome1" render="nome1"></f:ajax>
S

Retirei o execute, e não funcionou. Ele prosseguiu em dar submit no form.
Coloquei o ‘type=button’ para ele não dar submit, ai ele não chama o método Oo.
To quase baixando a biblioteca do aj4, e usando ele.

código neste momento:

<h:form prependId="false"> <h:commandButton id="butaoNome" type="button" action="#{myBean.exmetodo}" value="teste"> <f:ajax render="nome1"></f:ajax> </h:commandButton> <h:outputText id="nome1" value="#{myBean.nome1}" /> <h:outputText id="nome2" value="#{myBean.nome2}" /> </h:form>

Hebert_Coelho

Faça seu código ficar parecido com esse aí:

Eu retirei esse aí do livro Core Java Server Faces. Esse aí funciona! =D

ViniGodoy

Por favor, não banalize as tags informativas colocando coisas óbvias como [Problema], [Ajuda] ou [Dúvida].
Não é necessário falar o óbvio, principalmente com tanto destaque. Deixe o destaque para coisas importantes. :wink:

Criado 28 de outubro de 2011
Ultima resposta 29 de out. de 2011
Respostas 10
Participantes 4