[Resolvido]Primefaces: URL não muda quando sai da página lista de usuários para a do formulário

Possuo uma tela, que tem uma p:dataTable e tem botões que vão para edição ou removem o usuário. Existe um link[ ]abaixo da tabela que vai para a página de cadastro.
O link funfa blz, cadastra novo usuário e volta para a tabela. O botão de remover também ta sussa, remove ajax mesmo, uma blz. O problema é o botão de atualizar. Ele carrega o formulário(mesmo formulário de cadastro), preenche com o usuário especificado, tudo blz. Mas na hora de gravar ele atualiza a página, zera o usuário e não executa o método, ficandoo somente o formulário vazio. Como o usuário da sessão foi zerado o botão do formulário vazio agora cadastra e não atualiza(o que é correto). Já percebi que no cadastro funciona pq quando uso o link(em baixo da tabela) ele direciona pra tela com a url: http://localhost:8080/FabricaJSF/cliente/clienteEdit.xhtml. Já com o botão atualizar de cada usuário da tabela ele me direciona para a página de ediçao(exatamente a mesma da de cadastro) mas com a url: http://localhost:8080/FabricaJSF/cliente/clienteList.xhtml, que é a url da tabela, ou seja, pelo botão ele não atualiza a url. Dai quando clico no botão atualizar(de dentro do formulario), ele recarrega a página e ai sim aparece a url correta: http://localhost:8080/FabricaJSF/cliente/clienteEdit.xhtml.

Alguém já passou por isso? Ou isso deve acontecer e eu sou noob?

Segue os codigos:

Primeiro o da clienteList.xhtml

[code]

	<ui:define name="divMain">
		<p:panel header="Clientes">
			<p:dataTable id="clienteTable" var="cliente"
				value="#{clienteBean.clientes}" paginator="true" rows="10"
				paginatorPosition="bottom">
				<p:column headerText="Nome">
					<h:outputText value="#{cliente.nome}" />
				</p:column>
				<p:column headerText="Sobrenome">
					<h:outputText value="#{cliente.sobrenome}" />
				</p:column>
				<p:column headerText="Email">
					<h:outputText value="#{cliente.email}" />
				</p:column>/
				<p:column>
					<h:form>
						<p:commandButton value="Visualizar" icon="ui-icon-search">
							<f:setPropertyActionListener target="#{clienteBean.cliente}"
								value="#{cliente}" />
						</p:commandButton>
						<p:spacer width="10px" />
						<p:commandButton value="Editar" icon="ui-icon-pencil"
							action="#{clienteBean.goEdit}">
							<f:setPropertyActionListener target="#{clienteBean.cliente}"
								value="#{cliente}" />
						</p:commandButton>
						<p:spacer width="10px" />
						<p:commandButton value="Excluir" icon="ui-icon-trash"
							update=":clienteTable" action="#{clienteBean.remove}">
							<f:setPropertyActionListener target="#{clienteBean.cliente}"
								value="#{cliente}" />
						</p:commandButton>
					</h:form>
				</p:column>
			</p:dataTable>
			<br />
			<a
				href="${facesContext.externalContext.request.contextPath}/cliente/clienteEdit.xhtml">Cadastre-se</a>
		</p:panel>
		<p:dialog widgetVar="clienteEditDialogWidget"
			id="clienteEditDialogId" modal="true" closable="true"
			draggable="false" resizable="false">
			<ui:include src="/cliente/widget/clienteForm.xhtml" />
		</p:dialog>
	</ui:define>

</ui:composition>

</h:body>

[/code]

ClienteForm.xhtml

[code]

<p:panel
	header="#{clienteBean.cliente.id == 0?'Cadastro de clientes':'Edição de clientes'}">
	<h:form id="clienteForm" prependId="false">
		<h:panelGrid columns="3">
			<p:outputLabel value="Nome:" />
			<p:inputText id="txtNome" value="#{clienteBean.cliente.nome}">
				<f:validateLength minimum="3" maximum="15" />
			</p:inputText>
			<p:message for="txtNome" />

			<p:outputLabel value="Sobrenome:" />
			<p:inputText id="txtsobrenome"
				value="#{clienteBean.cliente.sobrenome}">
				<f:validateLength minimum="3" maximum="15" />
			</p:inputText>
			<p:message for="txtsobrenome" />

			<p:outputLabel value="Email:" />
			<p:inputText id="txtEmail" value="#{clienteBean.cliente.email}">
				<f:validateLength minimum="3" />
			</p:inputText>
			<p:message for="txtEmail" />

			<p:outputLabel value="CPF:" />
			<p:inputMask id="txtCpf" value="#{clienteBean.cliente.cpf}"
				mask="999.999.999-99">
				<stella:validateCPF formatted="true" />
			</p:inputMask>
			<p:message for="txtCpf" />

			<p:outputLabel value="Telefone Fixo:" />
			<p:inputMask id="txtTel" value="#{clienteBean.cliente.tel}"
				mask="(99)9999-9999" />
			<p:message for="txtTel" />

			<p:outputLabel value="Celular Fixo:" />
			<p:inputMask id="txtCel" value="#{clienteBean.cliente.cel}"
				mask="(99)9999-9999" />
			<p:message for="txtCel" />
		</h:panelGrid>
		<p:commandButton value="Salvar"
			rendered="#{clienteBean.cliente.id == 0}"
			action="#{clienteBean.salva}" ajax="false" />
		<p:commandButton value="Atualiza"
			rendered="#{clienteBean.cliente.id != 0}"
			action="#{clienteBean.atualiza}" ajax="false" />
	</h:form>
</p:panel>

</h:body>

[/code]

clienteEdit.xhtml

[code]
<ui:composition template="/resources/template/main.xhtml"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui"
xmlns:stella=“http://stella.caelum.com.br/faces2”>

<ui:define name="divMain">
	<ui:include src="widget/clienteForm.xhtml" />
</ui:define>

</ui:composition>
[/code]

ClienteBean.java

[code]@ManagedBean
public class ClienteBean {

private Cliente cliente;
private List<Cliente> clientes;

private MessageUtil message;

private ClienteController controller;

@PostConstruct
public void init() {
	cliente = new Cliente();
	controller = new ClienteController();
	clientes = controller.getAll();
	message = new MessageUtil();
}

public Cliente getCliente() {
	if (cliente == null) {
		cliente = new Cliente();
	}
	return cliente;
}

public void setCliente(Cliente cliente) {
	this.cliente = cliente;
}

public List<Cliente> getClientes() {
	return clientes;
}

public void setClientes(List<Cliente> clientes) {
	this.clientes = clientes;
}

public String salva() {
	controller.salva(cliente);
	message.sendInfoMessageToUser(cliente.getNome() + " cadastrado!");
	limpaForm();
	return "/cliente/clienteList.xhtml";
}

public String atualiza() {
	controller.atualiza(cliente);
	message.sendInfoMessageToUser(cliente.getNome() + " atualizado!");
	limpaForm();
	return "/cliente/clienteList.xhtml";
}

public void remove() {
	controller.remove(cliente);
	message.sendInfoMessageToUser(cliente.getNome() + " removido!");
	limpaForm();
}

public void limpaForm() {
	cliente = new Cliente();
	clientes = controller.getAll();
}

public String goEdit() {
	return "/cliente/clienteEdit.xhtml";
}

}[/code]

Resolvi trocando o escopo do managedBean. Agora ele é Session ao invés do defual que é request.

@ManagedBean
@SessionScoped
public class ClienteBean {

	private Cliente cliente;
	private List<Cliente> clientes;

Acho que deve ser pq o ao chamar o método goEdit() do clienteBean já esta em request, dai carrega os dados do usuário da lista no formulário, e quando chamo outro método no formulário para gravar o usuário ja não está mais no request, pois já acabou o escopo na requisição anterior. Logo o usuário vem em branco. Só não sei pq ele recarrega o formulário ao invés de ir para a lista, já que com o usuário preenchido ele volta à lista.

Bom, verificando direito o código, percebi que mudei o ajax do botão de edição da lista para false. Isso resolveu o problema do recarregamento que não tinha sacado na resposta anterior. Por isso não recarrega no final, quando submeto o botão de atualização do formulario.

<p:commandButton value="Editar" icon="ui-icon-pencil" ajax="false" action="#{clienteBean.goEdit}">