Formular a4j - dúvida

tenho o seguinte formulário:

<h:form id="novo_deposito"> <fieldset style="width:300px; margin:auto; margin-top:10px; margin-bottom:10px;"> <legend>Novo Depósito</legend> <p> Valor Depositado:<h:inputText required="true" value="#{deposito.deposito.valor}" /> </p> <p> Data do Deposito:<h:inputText required="true" value="#{deposito.deposito.data}"> <f:convertDateTime pattern="dd/MM/yyyy" /> </h:inputText> </p> <p style="text-align:right;"> <a4j:commandButton id="butao" style="text-align:right;" action="#{deposito.create}" oncomplete="alert('Deposito efetuado com sucesso!');" value="Depositar" /> </p> </fieldset> </h:form>

Então, quando fazem o deposito, o alert abre e dá tudo certo.
O que eu queria saber é se os valores dos campos dos formularios podem ser zerados assim que o alert for aberto.

a pessoa digita:

valor: 100
data: 10/01/2008

e clica em depositar, entao abre o alert ! porem valor: e data: ficam preenchidos ainda, gostaria de zerá-los… há como?

obrigado!

Eu li a respeito do argumento reRender do a4j:commandButton, que recebe uma lista com os ids dos campos a serem recarregados. Pesquise por isso.

Entao, eu tentei usar o reRender, mas continua com o mesmo valor, se digitei 120 no valor , quando pressiono Depositar vira 120.0 … pois 120.0 é o valor do atributo na sessao relacionada ao inputText …

Alguma sugestão ?

Pergunta idiota: na sua action, vc seta deposito.deposito.valor e deposito.deposito.data para, sei lá, null?

Já tentou colocar quaisquer outros valores? Posta o código da action e do JSP com reRender pra gente ver.

[quote=CintiaDR]Pergunta idiota: na sua action, vc seta deposito.deposito.valor e deposito.deposito.data para, sei lá, null?

Já tentou colocar quaisquer outros valores? Posta o código da action e do JSP com reRender pra gente ver. [/quote]

[code]package br.com.renanmartins;

import java.util.Date;

/*

  • To change this template, choose Tools | Templates
  • and open the template in the editor.
    */

/**
*

  • @author Renan
    */
    public class Deposito {

    private int depositoID;
    private float valor;
    private Date data;

    public Deposito() {

    }

    public Deposito(int depositoID, float valor, Date data){
    this.depositoID = depositoID;
    this.valor = valor;
    this.data = data;
    }

    public int getDepositoID() {
    return depositoID;
    }

    public void setDepositoID(int depositoID) {
    this.depositoID = depositoID;
    }

    public float getValor() {
    return valor;
    }

    public void setValor(float valor) {
    this.valor = valor;
    }

    public Date getData() {
    return data;
    }

    public void setData(Date data) {
    this.data = data;
    }

}[/code]

Aí está o codigo do meu deposito.java

e aqui meu Deposito controller:

[code]/*

  • To change this template, choose Tools | Templates
  • and open the template in the editor.
    */

package br.com.renanmartins.controller;

import br.com.renanmartins.Deposito;
import br.com.renanmartins.dao.DepositoDAO;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;

/**
*

  • @author Renan
    */
    public class DepositoC {

    private Deposito deposito;
    private DataModel model;

    public String novoDeposito(){
    this.deposito = new Deposito();
    return “novo_dep”;
    }

    public Deposito getDeposito(){
    return deposito;
    }

    public void setDeposito(Deposito deposito){
    this.deposito = deposito;
    }

    public DataModel getTodas() throws Exception{
    DepositoDAO dao = new DepositoDAO();
    model = new ListDataModel(dao.todosDepositos());
    return model;
    }

    public String create() throws Exception{
    DepositoDAO dao = new DepositoDAO();
    dao.salvar(deposito);
    return “sucesso_ins”;
    }

}
[/code]

hmmm… como o reRender funciona ? ele faz com que o bean seja instancializado novamente ?

Renan

Não, creio que não faz nenhuma nova instância. Ele RENDERIZA novamente os campos, ué, com o que está no bean.

public String create() throws Exception{ DepositoDAO dao = new DepositoDAO(); dao.salvar(deposito); deposito.setData(null); deposito.setValor(null); return "sucesso_ins"; }

&lt;h:form id="novo_deposito"&gt; &lt;fieldset style="width:300px; margin:auto; margin-top:10px; margin-bottom:10px;"&gt; &lt;legend&gt;Novo Depósito&lt;/legend&gt; <p> Valor Depositado:&lt;h:inputText required="true" value="#{deposito.deposito.valor}" id="valor"/&gt; </p> <p> Data do Deposito:&lt;h:inputText required="true" value="#{deposito.deposito.data}" id="data"&gt; &lt;f:convertDateTime pattern="dd/MM/yyyy" /&gt; &lt;/h:inputText&gt; </p> <p > &lt;a4j:commandButton id="butao" style="text-align:right;" action="#{deposito.create}" oncomplete="alert('Deposito efetuado com sucesso!');" value="Depositar" reRender="valor, data"/&gt; </p> &lt;/fieldset&gt; &lt;/h:form&gt;

Eu não testei. Mas deve ser algo assim.