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 );
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):