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]