Boa tarde,
Pessoal utilizando RequestScope a tag setPropertyActionListener não está funcionando, funciona apenas se mudar para SessionScope.
Lembrando que estou utilizando Spring.
quando clico em um botão que está no dataTable ele não seta os dados no atributo que referencie no target da tag setPropertyActinListener.
o codigo está da seguinte forma:
<p:dataTable var="vendedor" value="#{manterVendedorBean.listaVendedores}"
paginator="true" rows="5" resizableColumns="true"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
rowsPerPageTemplate="5,10">
<p:column>
<f:facet name="header">
<h:outputText value="CPF" />
</f:facet>
<h:outputText value="#{vendedor.pessoa.fisica.cpf}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Nome Pessoa" />
</f:facet>
<h:outputText value="#{vendedor.pessoa.fisica.nomePessoa}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Tel Residencial/Comercial" />
</f:facet>
<h:outputText value="#{vendedor.pessoa.telefoneResidencial}/#{vendedor.pessoa.telefonePessoal}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="E-mail" />
</f:facet>
<h:outputText value="#{vendedor.pessoa.email}" />
</p:column>
<p:column style="width:20px">
<h:panelGrid columns="3" styleClass="actions" cellpadding="2">
<p:commandButton update=":formulario:display" oncomplete="carDialog.show()" image="ui-icon ui-icon- search"title="Visualizar Vendedor">
<f:setPropertyActionListener value="#{vendedor}" target="#{manterVendedorBean.vendedorDetalhar}" />
</p:commandButton>
<p:commandButton update="formulario" image="ui-icon ui-icon-pencil" title="Editar Vendedor">
<f:setPropertyActionListener value="#{vendedor}" target="#{manterVendedorBean.vendedor}" />
</p:commandButton>
<p:commandButton update=":confirmacao:display" oncomplete="confirmation.show()" image="ui-icon ui-icon-close" title="Excluir Vendedor">
<f:setPropertyActionListener value="#{vendedor}" target="#{manterVendedorBean.vendedor}" />
</p:commandButton>
</h:panelGrid>
</p:column>
</p:dataTable>
segue o MB:
package br.com.taruma.apresentacao.controle;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.context.FacesContext;
import org.primefaces.event.SelectEvent;
import br.com.taruma.entidades.Endereco;
import br.com.taruma.entidades.Fisica;
import br.com.taruma.entidades.Pessoa;
import br.com.taruma.entidades.TbCidade;
import br.com.taruma.entidades.TbEstado;
import br.com.taruma.entidades.Vendedor;
import br.com.taruma.enumerator.SexoEnum;
import br.com.taruma.enumerator.StatusEnum;
import br.com.taruma.service.ManterVendedorService;
import br.com.taruma.utilitarios.NegocioCamposObrigatoriosException;
import br.com.taruma.utilitarios.NegocioException;
/**
* Método Controler para o caso de uso Manter Vendedor.
* @author silvanio.junior
*
*/
@ManagedBean
public class ManterVendedorBean implements Serializable{
/**
* SerialVersion
*/
private static final long serialVersionUID = 1L;
@ManagedProperty(value = "#{manterVendedorService}")
private ManterVendedorService service;
List<String> listaCidades = new ArrayList<String>();
private Vendedor vendedor = new Vendedor();
List<SexoEnum> listaSexo = new ArrayList<SexoEnum>();
private Collection<Vendedor> listaVendedores = new ArrayList<Vendedor>();
private List<StatusEnum> listaStatus = new ArrayList<StatusEnum>();
private Vendedor vendedorDetalhar;
/**
* Método inicia, para abrir o formulário.
* @return
*/
public String inicial(){
listaSexo = new ArrayList<SexoEnum>();
listaStatus = new ArrayList<StatusEnum>();
listaSexo.add(SexoEnum.M);
listaSexo.add(SexoEnum.F);
listaStatus.add(StatusEnum.A);
listaStatus.add(StatusEnum.I);
vendedor = new Vendedor();
listaVendedores = new ArrayList<Vendedor>();
return "vendedor";
}
public void teste(Vendedor vend){
getVendedor();
}
/**
* Método responsavel por obter o estado por iniciais.
* @param estado
* inicial do estado.
* @return lista de estados.
*/
public List<String> obterEstado(String estado){
//esse método preenche o autocomplete de estados.
List<TbEstado> estados = this.getService().obterEstadoPorInicial(estado);
List<String> nomes = new ArrayList<String>();
for(TbEstado estad:estados){
nomes.add(estad.getNome());
}
return nomes;
}
/**
* Método rensponsável por consultarCidadePorEstado.
* @param event
* envento para consultar.
*/
public void consultarCidadePorEstado(SelectEvent event){
//esse método é quando seleciona um estado no autoCompleate de estado, ae fará a consulta de cidades por estado
//e jogara em uma lista.
listaCidades = new ArrayList<String>();
vendedor.getPessoa().getEndereco().getTbCidade().getTbEstado().setNome((String)event.getObject());
List<TbCidade> cidades = this.getService().consultarCidadePorEstado((String)event.getObject());
for(TbCidade cid:cidades){
listaCidades.add(cid.getNome());
}
}
/**
* Método responspavel por obter a cidade segundo a query.
* @param query
* cidade.
* @return lista de String.
*/
public List<String> obterCidadePorEstado(String query){
//esse método recebe oque foi digitado no auocomplete de cidade e compara com a lista de cidade.
List<String> suggestions = new ArrayList<String>();
for( String cidade : listaCidades) {
if(cidade.toUpperCase().startsWith(query.toUpperCase())){
if(!suggestions.contains(cidade)){
suggestions.add(cidade);
}
}
}
return suggestions;
}
/**
* Método responsável por salvar um vendedor.
*/
public void salvarVendedor(){
Boolean isInclusao = true;
if(vendedor.getIdVendedor()!=null){
isInclusao = false;
}
//seta o status do vendedor A ativo I inativo
if(vendedor.getStatus()==null){
vendedor.setStatus(StatusEnum.A);
}
//seta o tipo da pessoa.
getVendedor().getPessoa().setTipoPessoa("F");
try{
this.verificarDadosObrigatorios(vendedor);
//salva o vendedor e mostra a mensagem de sucesso.
this.getService().salvarVendedor(this.getVendedor());
if(isInclusao){
FacesContext.getCurrentInstance().addMessage(null,
new FacesMessage(FacesMessage.SEVERITY_INFO,"Sucesso!", "Vendedor Cadastrado Com Sucesso"));
listaVendedores.add(vendedor);
}else{
FacesContext.getCurrentInstance().addMessage(null,
new FacesMessage(FacesMessage.SEVERITY_INFO,"Sucesso!", "Vendedor Alterado Com Sucesso"));
}
vendedor = new Vendedor();
}catch (NegocioException e) {
//caso caia em alguma regra de negocio.
FacesContext.getCurrentInstance().addMessage(null,
new FacesMessage(FacesMessage.SEVERITY_INFO,"Erro ao Cadastrar", e.getMessage()));
}catch (NegocioCamposObrigatoriosException e) {
FacesContext.getCurrentInstance().addMessage(null,
new FacesMessage(FacesMessage.SEVERITY_ERROR,"Os seguintes campos são de preenchimento Obrigatório", e.getMessage()));
}
catch (Exception e) {
//erro no sistema
FacesContext.getCurrentInstance().addMessage(null,
new FacesMessage(FacesMessage.SEVERITY_ERROR,"Erro no Sistema", e.getMessage()));
}
}
/**
* Método responsável por verificar obrigatoriedade os dados do vendedor
* @param vendedor
* Objeto de vendedor.
*/
private void verificarDadosObrigatorios(Vendedor vendedor) {
Fisica fis = vendedor.getPessoa().getFisica();
List<String> mensagens = new ArrayList<String>();
if(fis.getCpf()==null||fis.getCpf().isEmpty()){
mensagens.add("Cpf");
}
if(fis.getNomePessoa()==null||fis.getNomePessoa().isEmpty()){
mensagens.add("Nome Vendedor");
}
if(fis.getSexo()==null||fis.getSexo().getSigla().isEmpty()){
mensagens.add("Sexo");
}
TbCidade cid = vendedor.getPessoa().getEndereco().getTbCidade();
if(cid.getNome()==null||cid.getNome().isEmpty()){
mensagens.add("Cidade");
}
if(cid.getTbEstado().getNome()==null||cid.getTbEstado().getNome().isEmpty()){
mensagens.add("Estado");
}
if(!mensagens.isEmpty()){
String mensage = mensagens.toString().replace("]", "").replace("[", "")+".";
throw new NegocioCamposObrigatoriosException(mensage);
}
}
/**
* Método responsável por consultar o vendedor por filtros.
*/
public void consultarVendedorPorFiltros(){
setListaVendedores(this.getService().consultarVendedoresPorFiltros(vendedor));
if(this.getListaVendedores().isEmpty()){
FacesContext.getCurrentInstance().addMessage(null,
new FacesMessage(FacesMessage.SEVERITY_WARN,"","Nenhum Vendedor Foi Encontrado."));
}
}
/**
* Método responsável por limpar os dados do vendedor.
*/
public void limpar(){
vendedor = new Vendedor();
}
/**
* Método responsáel por exlcuir um vendedor fisicamente.
*/
public void excluir(){
try{
if(vendedor.getStatus().equals(StatusEnum.I)){
throw new NegocioException("O vendedor "+ vendedor.getPessoa().getFisica().getNomePessoa()+ " já está inativa.");
}
this.getService().excluirVendedor(vendedor);
listaVendedores.remove(vendedor);
}catch (Exception e) {
FacesContext.getCurrentInstance().addMessage(null,
new FacesMessage(FacesMessage.SEVERITY_WARN,"",e.getMessage()));
}
}
public ManterVendedorService getService() {
return service;
}
public void setService(ManterVendedorService service) {
this.service = service;
}
public Vendedor getVendedor() {
vendedor = vendedor == null?new Vendedor():vendedor;
vendedor.setPessoa(vendedor.getPessoa() == null ?new Pessoa():vendedor.getPessoa());
vendedor.getPessoa().setFisica(vendedor.getPessoa().getFisica() == null ? new Fisica():vendedor.getPessoa().getFisica());
vendedor.getPessoa().setEndereco(vendedor.getPessoa().getEndereco()==null?new Endereco():vendedor.getPessoa().getEndereco());
vendedor.getPessoa().getEndereco().setTbCidade(vendedor.getPessoa().getEndereco().getTbCidade()==null?new TbCidade():vendedor.
getPessoa().getEndereco().getTbCidade());
vendedor.getPessoa().getEndereco().getTbCidade().setTbEstado(vendedor.getPessoa().getEndereco().getTbCidade().getTbEstado()==null?
new TbEstado():vendedor.getPessoa().getEndereco().getTbCidade().getTbEstado());
return vendedor;
}
public void setVendedor(Vendedor vendedor) {
this.vendedor = vendedor;
}
public List<String> getListaCidades() {
return listaCidades;
}
public void setListaCidades(List<String> listaCidades) {
this.listaCidades = listaCidades;
}
public Collection<Vendedor> getListaVendedores() {
return listaVendedores;
}
public void setListaVendedores(Collection<Vendedor> listaVendedores) {
this.listaVendedores = listaVendedores;
}
public List<SexoEnum> getListaSexo() {
return listaSexo;
}
public void setListaSexo(List<SexoEnum> listaSexo) {
this.listaSexo = listaSexo;
}
public List<StatusEnum> getListaStatus() {
return listaStatus;
}
public void setListaStatus(List<StatusEnum> listaStatus) {
this.listaStatus = listaStatus;
}
public Vendedor getVendedorDetalhar() {
return vendedorDetalhar;
}
public void setVendedorDetalhar(Vendedor vendedorDetalhar) {
this.vendedorDetalhar = vendedorDetalhar;
}
}
se alguem souber como corrigir, agradeço.