Pessoal,
tenho um problema.
estou construindo uma app com jsf + richfaces e ta acontecendo uma coisa muito estranha…
eu tenho uma pagina q tem uma listagem de clientes, nela eu clico em um registro (q eh um link), e sou levado para uma pagina com um formulario onde poderei editar os dados do cliente.
O problema ocorre quando dou o submit do formulario, esta sendo chamado um outro metodo no meu managed bean q n eh o metodo q faz a atualização do cliente. O metodo q esta sendo chamado eh o alterar() e nao o salvar(), reparem q no botao q submete o formulario eu chamo actionListener="#{clienteController.salvar}"
Aqui vai o codigo:
pagina com a listagem:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:rich="http://richfaces.ajax4jsf.org/rich"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:f="http://java.sun.com/jsf/core">
<ui:composition template="/pages/auth/welcome.xhtml">
<ui:define name="mainContent">
<h2>Cadastro de Cliente</h2>
<fieldset>
<a4j:form styleClass="formulario">
<h:outputLink value="/ProjetoTDA/pages/auth/editar_cliente.jsf">Novo Cliente</h:outputLink>
<rich:dataTable style="margin-top:3em" cellpadding="0"
cellspacing="0" id="tabelaCliente" columns="3" rows="8" width="450"
border="0" var="cliente" value="#{pesquisaClienteController.listaCliente}">
<f:facet name="header">
<h:panelGrid columns="2">
<h:outputLabel value="pesquisa:" for="pesquisa" />
<h:inputText id="pesquisa" value="#{pesquisaClienteController.pesquisa}" />
</h:panelGrid>
</f:facet>
<rich:column>
<center>
<a4j:commandLink action="#{clienteController.alterar}" value="#{cliente.nome}">
<f:param name="id" value="#{cliente.clienteID}" />
</a4j:commandLink>
</center>
</rich:column>
<rich:column>
<center>
<a4j:commandLink actionListener="#{pesquisaClienteController.clienteAExcluir}" >
<h:graphicImage value="/resources/images/delete.gif" />
</a4j:commandLink>
</center>
</rich:column>
<f:facet name="footer">
<rich:datascroller />
</f:facet>
</rich:dataTable>
</a4j:form>
</fieldset>
</ui:define>
</ui:composition>
</html>
Pagina de edição do cliente:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:a4j="https://ajax4jsf.dev.java.net/ajax"
xmlns:rich="http://richfaces.ajax4jsf.org/rich"
xmlns:f="http://java.sun.com/jsf/core">
<ui:composition template="/pages/auth/welcome.xhtml">
<ui:define name="mainContent">
<h2>Cadastro de Cliente</h2>
<fieldset>
<a4j:form id="formEdicaoCliente">
<h:inputHidden value="#{clienteController.clienteDTO.clienteID}" rendered="#{not clienteController.atualizacao}"/>
<h:inputHidden value="#{clienteController.atualizacao}"/>
<h:panelGrid columns="3" style="padding-top:0cm">
<h:outputText value="Nome:" />
<h:inputText id="nome" style="width: 320px;" value="#{clienteController.clienteDTO.nome}" required="true" requiredMessage="Informe o nome"/>
<h:message for="nome" />
<h:outputText value="CPF/CNPJ:" />
<h:inputText id="cpf" style="width: 320px;" value="#{clienteController.clienteDTO.cpfCnpj}" required="true" requiredMessage="Informe o cpf/cnpj"/>
<h:message for="cpf" />
<h:outputText value="Tipo:" />
<h:selectOneMenu id="tipo" value="#{clienteController.clienteDTO.tipoPessoa}" style=" width : 157px;" required="true" requiredMessage="Imforma o tipo de cliente">
<f:selectItems value="#{clienteController.listaTipoPessoa}"/>
</h:selectOneMenu>
<h:message for="tipo" />
<h:outputText value="Isenção:" />
<h:selectOneMenu id="isencao" value="#{clienteController.clienteDTO.statusIsencao}" style="text-align:left; width : 156px;" required="true" requiredMessage="Informe a isenção">
<f:selectItems value="#{clienteController.listaIsencao}"/>
</h:selectOneMenu>
<h:message for="isencao" />
</h:panelGrid>
<h:panelGrid columns="1" id="botoesEdicaoCliente" styleClass="confirmar">
<a4j:commandButton rendered="#{not clienteController.atualizacao}" actionListener="#{clienteController.salvar}" styleClass="botao" id="cadastrar" value="Cadastrar" oncomplete="#{rich:component('panel')}.show() "/>
<a4j:commandButton rendered="#{clienteController.atualizacao}" actionListener="#{clienteController.salvar}" styleClass="botao" id="atualizar" value="Atualizar" oncomplete="#{rich:component('panel')}.show() "/>
</h:panelGrid>
<rich:modalPanel id="panel" width="350" height="100">
<f:facet name="header">
<h:panelGroup>
<h:outputText value="Atenção!"></h:outputText>
</h:panelGroup>
</f:facet>
<f:facet name="controls">
<h:panelGroup>
<h:graphicImage value="/resources/images/close.png" style="cursor:pointer" id="hidelink"/>
<rich:componentControl for="panel" attachTo="hidelink" operation="hide" event="onclick"/>
</h:panelGroup>
</f:facet>
<h:outputText value="#{clienteController.mensagem}"/>
<br/>
<rich:spacer height="15"/>
<center>
<h:panelGrid columns="1">
<h:outputLink value="/ProjetoTDA/pages/auth/welcome.jsf" >Voltar para home</h:outputLink>
</h:panelGrid>
</center>
</rich:modalPanel>
</a4j:form>
</fieldset>
</ui:define>
</ui:composition>
</html>
Managed Bean:
package tda.controllers;
import java.util.ArrayList;
import java.util.List;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.model.SelectItem;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import tda.dto.ClienteDTO;
import tda.dto.TituloDTO;
import tda.dto.UsuarioDTO;
import tda.enums.IsencaoEnum;
import tda.enums.TipoPessoaEnum;
import tda.exceptions.TDAException;
import tda.persistence.ClientePersistence;
import tda.persistence.UsuarioPersistence;
import tda.util.FacesUtil;
import tda.util.NavigationConstants;
public class ClienteController {
private static final Logger log = Logger.getLogger(ClienteController.class);
private ClienteDTO clienteDTO;
private boolean atualizacao;
private ClientePersistence persistence;
private UsuarioPersistence usuarioPersistence;
private String mensagem;
public ClienteController() {
this.persistence = ClientePersistence.getInstance();
this.usuarioPersistence = UsuarioPersistence.getInstance();
}
public String alterar() {
Long id = Long.valueOf(FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("id"));
log.info("obtido parametro: " + id);
this.clienteDTO = persistence.buscarClientePorID(id);
this.atualizacao = true;
log.info("redirecionando para pagina de editar cliente.");
return NavigationConstants.EDITAR_CLIENTE;
}
public void salvar(ActionEvent event) {
try {
if (!this.atualizacao) {
// se for cadastro, temos q buscar a instituição do usuario q esta logado e setar no cliente q esta sendo cadastrado
log.info("chamando cadastro de cliente.");
String login = FacesUtil.getLoginUsuarioPrincipal();
UsuarioDTO usuarioDTO = usuarioPersistence.buscarUsuarioPorLogin(login);
this.clienteDTO.setInstituicaoID(usuarioDTO.getInstituicaoID());
persistence.cadastrar(this.clienteDTO);
this.mensagem = "Cliente cadastrado com sucesso";
} else {
log.info("atualizando cliente. clienteID:" + clienteDTO.getClienteID());
persistence.atualizarCliente(this.clienteDTO);
this.mensagem = "Cliente atualizado com sucesso";
}
} catch (TDAException e) {
if (this.atualizacao) {
this.mensagem = "Erro ao atualizar cliente";
} else {
this.mensagem = "Erro ao cadastrar cliente";
}
}
}
public List<SelectItem> getListaTipoPessoa() {
List<SelectItem> listaSelects = new ArrayList<SelectItem>();
for (TipoPessoaEnum tipoPessoa : TipoPessoaEnum.values()) {
SelectItem item = new SelectItem();
item.setValue(tipoPessoa);
item.setLabel(tipoPessoa.getDescricao());
listaSelects.add(item);
}
SelectItem itemSelecione = new SelectItem(null, "Selecione");
listaSelects.add(0, itemSelecione);
return listaSelects;
}
public List<SelectItem> getListaIsencao() {
List<SelectItem> listaSelects = new ArrayList<SelectItem>();
for (IsencaoEnum isencao : IsencaoEnum.values()) {
SelectItem item = new SelectItem();
item.setValue(isencao);
item.setLabel(isencao.getDescricao());
listaSelects.add(item);
}
SelectItem itemSelecione = new SelectItem(null, "Selecione");
listaSelects.add(0, itemSelecione);
return listaSelects;
}
public ClienteDTO getClienteDTO() {
return clienteDTO;
}
public void setClienteDTO(ClienteDTO clienteDTO) {
this.clienteDTO = clienteDTO;
}
public boolean isAtualizacao() {
return atualizacao;
}
public void setAtualizacao(boolean atualizacao) {
this.atualizacao = atualizacao;
}
public String getMensagem() {
return mensagem;
}
public void setMensagem(String mensagem) {
this.mensagem = mensagem;
}
}
faces config:
<?xml version="1.0" encoding="UTF-8"?>
<faces-config version="1.2" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd">
<managed-bean>
<managed-bean-name>clienteDTO</managed-bean-name>
<managed-bean-class>tda.dto.ClienteDTO</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>clienteController</managed-bean-name>
<managed-bean-class>tda.controllers.ClienteController</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
<managed-property>
<property-name>clienteDTO</property-name>
<value>#{clienteDTO}</value>
</managed-property>
</managed-bean>
</faces-config>
podem me ajudar com isto? Sou novo no desenvolvimento jsf e n sei oq esta acontecendo…
Obrigado!