JSF RI: como resetar um formulario!

Estou fazendo uma aplicação simples de CRUD com JSF RI.
Tenho um bean de sessão (tem que ser de sessão) ele inclui, altera, exclui e pesquisa resultados em um banco de dados. Ao clicar em uma linha da datatable ele preenche os campos do form para que eu altere.
Até aí tudo bem, o problema é que depois de atualizar os campos não consigo apaga-los! Já tentei de tudo, até excluir o bean da session mas ainda assim os campos continuam preenchidos! :roll:

O bean tem que ser de sessão pois a minha datatable só funciona assim!
Segue minhas tentativas:

Metodo de reset

[code] public void reset() {
FacesContext.getCurrentInstance().getApplication()
.createValueBinding( “#{backing_Produto}”).setValue(FacesContext.getCurrentInstance(), null );

    codigo.setValue(null);
    idProduto.setValue(null);
    nome.setValue(null);
    valorUnitario.setValue(null);
    quantidade.setValue(null);
    deleteButton.setDisabled(true);
}[/code]

Botão no jsp (invoca o metodo, mas não apaga os campos:

<h:commandButton value="Limpar" binding="#{backing_Produto.cleanButton}" id="cleanButton" action="#{backing_Produto.reset}" immediate="true" type="submit"/>

Bem é isso aí, se alguem tiver alguma gambi, ou melhor dica para solucionar isso de forma prática agradeceria muito… :cry: :lol: :x

Acho q assim seria mais facil… eheheh

<h:commandButton type="reset" value="Limpar" />

no type só sao validos: submit e reset !

vlw

[quote=gui_sv]Acho q assim seria mais facil… eheheh

<h:commandButton type="reset" value="Limpar" />

no type só sao validos: submit e reset !

vlw[/quote]
Na verdade esta foi a primeira tentativa que fiz, mas não acontecia nada com o formulario.

Aew gente sei que o tópico é bem antigo mas eu achei interessante postar o que descobri.

Como eu consegui limpar os dados de um formulário JSF após uma certa operação.

No meu caso eu queria limpar um formulário de cadastro de contas a pagar e receber o que eu fiz foi o seguinte.

1-Criei este método.


public static void setBean(String ref, Object val){
        // Obtém o faces context.
        FacesContext facesContext = FacesContext.getCurrentInstance();
        // Cria a expressão que possibilitará o acesso ao managed bean.
        ref = "#{" + ref + "}";
        ELContext eLContext = facesContext.getELContext();
        ExpressionFactory ef = facesContext.getApplication().getExpressionFactory();
        // Aqui é o pulo do gato. Aqui é passado o novo valor para o managed bean
        // que está no contexto do JSF através do método "setValue()".
         ef.createValueExpression(eLContext, ref, Object.class).setValue(eLContext, val);
    }

Deixei o método estático por conveniência já que não preciso instanciar meu helper para fazer a chamada ao método. Este método vai substituir o managed bean que está com as informações que você não precisa por um novinho em folha para sua view.

2- Daí coloco em um commandButton a ação definida no método abaixo. (No meu caso o adicionar de um objeto no banco de dados) :

@Override
    public String adicionar() {
        // No meu caso estou usando herança e as ações são executadas na super classe.
        super.adicionar();
        // Aqui apenas chamo o método que substituirá o bean antigo pelo novo.
        HelperFaces.setBean(HelperFaces.NOME_BEAN_PLANO_CONTA, new PlanoConta());
        return "";
    }

Eu estou usando richFaces e sua biblioteca a4j então o commandButton ficou assim(Eu acho o ajax uma das 7 maravilhas do mundo hehehehehehe “Brincadeirinha” mas é muito bom msm):

<a4j:commandButton action="#{planoContaManager.adicionar}"
                                 value="Incluir" 
                                 rendered="#{planoContaManager.incluindo}"
                                 reRender="form"/>

Bom é isso ai. Espero que as próximas pessoas que estiverem com o mesmo dilema que eu estava possam ser ajudados por esta ideia vlw.