Limpar formulario Primefaces

Olá pessoa,

estou com o seguinte problema, ao clicar no botão de limpar o formulario o mesmo chama meu método,
e dentro dele faço um new para os objetos que quero limpar,
porém o mesmo não zera o meu objeto, porque na resposta do primefaces ele trás o formulario para atualizar mas o input continua com o valor.

página xhtml:

[code]<ui:composition xmlns=“http://www.w3.org/1999/xhtml
xmlns:h=“http://java.sun.com/jsf/html
xmlns:f=“http://java.sun.com/jsf/core
xmlns:ui=“http://java.sun.com/jsf/facelets
xmlns:p=“http://primefaces.prime.com.tr/ui
template="/template/layoutManager.xhtml">

<ui:define name="title">
	<h:outputText value="#{messages['administrador.title.label']}" />
</ui:define>

<ui:define name="body">
	<p:messages id="messages" />
	<h:form id="formManagerAdministrador">
		<h:inputHidden
			value="#{administradorBean.administrador.idAdministrador}" />
		<p:panel header="#{messages['administrador.panelManter.label']}">
			<h:panelGrid columns="4">
				<h:outputLabel value="#{messages['administrador.nome.label']}" />
				<p:inputText id="nome" size="40"
					value="#{administradorBean.administrador.nome}"
					label="#{messages['administrador.nome.label']}" required="true" />

				<h:outputLabel for="email"
					value="#{messages['administrador.email.label']}" />
				<p:inputText id="email" size="40"
					value="#{administradorBean.administrador.email}"
					label="#{messages['administrador.email.label']}" required="true" />

				<h:outputLabel for="login" value="#{messages['login.login.label']}" />
				<p:inputText id="login" value="#{administradorBean.login.login}"
					label="#{messages['login.login.label']}" required="true" />

				<h:outputLabel for="senha" value="#{messages['login.senha.label']}" />
				<p:password id="senha" value="#{administradorBean.login.senha}"
					promptLabel="#{messages['org.primefaces.password.feedback.promptLabel']}"
					weakLabel="#{messages['org.primefaces.password.feedback.weak']}"
					goodLabel="#{messages['org.primefaces.password.feedback.good']}"
					strongLabel="#{messages['org.primefaces.password.feedback.strong']}"
					label="#{messages['login.senha.label']}" />

				<h:outputLabel value="#{messages['estado.descricao.label']}" />
				<h:selectOneMenu id="estado" required="true"
					value="#{cidadeBean.estado}"
					label="#{messages['estado.descricao.label']}">
					<f:selectItem itemValue="0"
						itemLabel="#{messages['estado.noneSelected.label']}" />
					<f:selectItems value="#{estadoBean.estados}" var="estado"
						itemLabel="#{estado.descricao}"
						itemValue="#{estado.idEstado}" />
					<p:ajax update="cidade, messages"
						listener="#{cidadeBean.loadCidadesByEstado}" />
				</h:selectOneMenu>

				<h:outputLabel value="#{messages['cidade.descricao.label']}" />
				<h:selectOneMenu id="cidade" required="true"
					value="#{administradorBean.administrador.cidade.idCidade}"
					label="#{messages['cidade.descricao.label']}">
					<f:selectItem itemValue="0"
						itemLabel="#{messages['cidade.noneSelected.label']}" />
					<f:selectItems value="#{cidadeBean.cidades}" var="cidade"
						itemLabel="#{cidade.descricao}"
						itemValue="#{cidade.idCidade}" />
				</h:selectOneMenu>
				
				<p:commandButton value="#{messages['button.salvar']}"
					actionListener="#{administradorBean.salvar}"
					update="formManagerAdministrador, messages" />
				<p:commandButton value="#{messages['button.cancelar']}"
					action="#{administradorBean.novo}"
					immediate="true"
					update="formManagerAdministrador, messages" />
			</h:panelGrid>
		</p:panel>
	</h:form>
</ui:define>

</ui:composition>[/code]

class java:

[code]package br.com.site.beans;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
import org.springframework.web.context.WebApplicationContext;

import br.com.site.entity.Administrador;
import br.com.site.entity.Estado;
import br.com.site.entity.Login;

@Service
@Scope(WebApplicationContext.SCOPE_REQUEST)
public class AdministradorBean {

private Administrador administrador = new Administrador();

private Login login = new Login();

public void salvar() {
	novo();
}

public void novo() {
	administrador = new Administrador();
	login = new Login();
}

public Administrador getAdministrador() {
	return administrador;
}

public void setAdministrador(Administrador administrador) {
	this.administrador = administrador;
}

public Login getLogin() {
	return login;
}

public void setLogin(Login login) {
	this.login = login;
}

}
[/code]

alguém sabe como resolver este problema?

Cara aparentemente esta tudo em ordem, mas faz o seguinte, tira o atributo immediate do commandButton, acredito que se você fizer isso ele já não vai mais chamar o método, se isso acontecer vai no método e coloca ele pra dar um retorno de uma String vazia mesmo, e tenta de novo

cara não funcionou porque:
se eu tirar o immediate ele valida o form
e com o immediate ele envia mas ocorre o problema
ja coloque pra retorna uma String
e mudei pra ajax=“false”

e nada

Diego, não sei se é bem o que vc quer … Mas limpo meus formulários dessa forma:

<p:commandButton value="Limpar" ajax="true" immediate="true" type="reset"/>

Valeu Diego

Quando eu enviava um formulário e houvesse erro no preenchimento, por exemplo, os dados ficavam no form mesmo com um reset e instanciando o objeto novamente.

Então uso o seguinte:

[code] UIForm form = (UIForm) context.getViewRoot().findComponent(“nomeform”);
cleanSubmittedValues(form);

private void cleanSubmittedValues(UIComponent component) {
    if (component instanceof EditableValueHolder) {
        EditableValueHolder evh = (EditableValueHolder) component;
        evh.setSubmittedValue(null);
        evh.setValue(null);
        evh.setLocalValueSet(false);
        evh.setValid(true);
    }
    if (component.getChildCount() > 0) {
        for (UIComponent child : component.getChildren()) {
            cleanSubmittedValues(child);
        }
    }
}

[/code]

Talvez ajude

Ressuscitando o tópico.
Precisei dessa solução, vou colocar a forma que eu utilizei para resolver o meu problema.

Page:

 <p:commandButton value="Salvar" action="#{pessoaController.salvar}" update="@form" />

Java code:

public void salvar() {
    pessoaService.save(product);
    pessoa= new Pessoa();
}
1 curtida

Ótima solução colombelli, resolveu meus problemas