E ai gente, tudo bom?
sou novo por aqui e to com um problema.
Tenho uma aplicação em JSF + Hibernate + Primefaces e estou com o seguinte problema:
Na minha página de listagem tenho a datatable listando os registros, e tenho alguns commandoButtons
para executar algumas ações como ir para a página de cadastro, ir para a página de edição e excluir.
Então quando quero executar alguma dessas ações eu seleciono uma linha na tabela e clico em algum desses botões.
Tudo funciona normalmente, porém eu percebi através do debug que qualquer ação que eu executar no bean, antes da ação
ser executada, o método que retorna a lista de registros para a datatable é executado.
Exemplo: tenho o método criar(), que leva para a página de cadastro. Quando clico no botão que chama o método criar(), antes a aplicação executa o getListaPerfis(), que é o método que retorna os registros para a datatable.
Quero saber se alguém pode me ajudar, pois não consigo entender porque ele faz isso.
segue ai abaixo o código do meu bean e da minha página:
PerfilBean.java
@ManagedBean
@RequestScoped
public class PerfilBean {
private SGECPerfil perfil;
private DataModel<SGECPerfil> listaPerfis;
private String codString;
public PerfilBean() {
perfil = new SGECPerfil();
}
public String getCodString() {
return codString;
}
public void setCodString(String codString) {
this.codString = codString;
}
public DataModel<SGECPerfil> getListaPerfis() {
if(listaPerfis == null){
PerfilDAO pdao = new PerfilDAO();
listaPerfis = new ListDataModel<SGECPerfil>(pdao.listarPagina());
}
return listaPerfis;
}
public void setListaPerfis(DataModel<SGECPerfil> listaPerfis) {
this.listaPerfis = listaPerfis;
}
public SGECPerfil getPerfil() {
return perfil;
}
public void setPerfil(SGECPerfil perfil) {
this.perfil = perfil;
FacesContext context = FacesContext.getCurrentInstance();
context.getExternalContext().getSessionMap().remove("perfil");
context.getExternalContext().getSessionMap().put("perfil", perfil);
}
public String listar(){
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().remove("perfil");
return "perfilListagem";
}
public String listarModulos(){
FacesContext context = FacesContext.getCurrentInstance();
try {
return "perfilModuloListagem";
} catch (Exception e) {
e.printStackTrace();
context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Não Foi Possível Carregar os Módulos", null));
return "perfilListagem";
}
}
public String criar(){
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().remove("perfil");
perfil = new SGECPerfil();
return "perfilCadastro";
}
public String cadastrar(){
FacesContext context = FacesContext.getCurrentInstance();
try {
SGECMembros logado = (SGECMembros) context.getExternalContext().getSessionMap().get("usuario");
perfil.setSGECMembros(logado);//Usuário Membro Logado
perfil.setPERFDataHoraCadastro(new Date(Calendar.getInstance().getTime().getTime()));
PerfilDAO pdao = new PerfilDAO();
pdao.cadastrarOuAtualizar(perfil);
context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Perfil Cadastrado com Sucesso", null));
return "perfilListagem";
} catch (Exception e) {
e.printStackTrace();
context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Não Foi Possível Cadastrar o Perfil", null));
return "perfilCadastro";
}
}
public String editar(){
FacesContext context = FacesContext.getCurrentInstance();
try {
context.getExternalContext().getSessionMap().remove("perfil");
PerfilDAO pdao = new PerfilDAO();
perfil = pdao.localizar(perfil.getPERFCodigo());
codString = perfil.getPERFCodigo().toString();
return "perfilEdicao";
} catch (Exception e) {
e.printStackTrace();
context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Não Foi Possível Carregar as Informações do Perfil", null));
return "perfilListagem";
}
}
public String excluir(){
FacesContext context = FacesContext.getCurrentInstance();
try {
context.getExternalContext().getSessionMap().remove("perfil");
PerfilDAO pdao = new PerfilDAO();
perfil = pdao.localizar(perfil.getPERFCodigo());
pdao.excluir(perfil);
context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Perfil Excluído com Sucesso", null));
return "perfilListagem";
} catch (Exception e) {
e.printStackTrace();
context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Não Foi Possível Excluir o Perfil", null));
return "perfilListagem";
}
}
public String atualizar(){
FacesContext context = FacesContext.getCurrentInstance();
try {
PerfilDAO pdao = new PerfilDAO();
perfil.setPERFCodigo(Integer.parseInt(context.getExternalContext().getRequestParameterMap().get("codPerfil")));
SGECPerfil perfilTransicao = pdao.localizar(perfil.getPERFCodigo());
perfilTransicao.setPERFNome(perfil.getPERFNome());
perfil = perfilTransicao;
pdao.cadastrarOuAtualizar(perfil);
context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Perfil Atualizado com Sucesso", null));
return "perfilListagem";
} catch (Exception e) {
e.printStackTrace();
context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Não Foi Possível Atualizar o Perfil", null));
return "perfilEdicao";
}
}
}
perfilListagem.xhtml
<?xml version='1.0' encoding='UTF-8' ?>
<!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:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.prime.com.tr/ui"
xmlns:f="http://java.sun.com/jsf/core">
<ui:composition template="index.xhtml">
<ui:define name="conteudo">
<p:dataTable id="tabelaPerfis" var="perfil" value="#{perfilBean.listaPerfis}"
emptyMessage="Nenhum Registro Encontrado" paginator="true" rows="10"
paginatorTemplate="{FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink}"
paginatorPosition="bottom" selectionMode="single" selection="#{perfilBean.perfil}"
style="font-size: 11px;" update="codPerfil">
<f:facet name="header">
<table style="width: 92.5%; margin-top: 2.2%;">
<tr>
<td style="text-align: left;"><h:outputText value="Lista de Perfis" style="font-size: 18px;"/></td>
<td style="text-align: right;">
<p:commandLink action="#{perfilBean.criar}" ajax="false" title="Cadastrar">
<h:graphicImage url="images/8.png" style="border: none;" width="22" height="22"/>
</p:commandLink>
<p:commandLink action="#{perfilBean.editar}" ajax="false" title="Editar">
<h:graphicImage url="images/2.png" style="border: none;" width="22" height="22"/>
</p:commandLink>
<p:commandLink onclick="confirmacao.show()" title="Excluir">
<h:graphicImage url="images/9.png" style="border: none;" width="22" height="22"/>
</p:commandLink>
<p:commandLink action="#{perfilBean.listar}" immediate="true" ajax="false" title="Listar">
<h:graphicImage url="images/page_preview-32.png" style="border: none;" width="22" height="22"/>
</p:commandLink>
<p:commandLink action="#{perfilBean.listarModulos}" immediate="true" ajax="false" title="Listar Módulos">
<h:graphicImage url="images/43.png" style="border: none;" width="22" height="22"/>
<f:param id="codPerfil" name="codPerfil" value="#{perfilBean.codString}"/>
</p:commandLink>
</td>
</tr>
</table>
</f:facet>
<p:column headerText="Código">
<h:outputText value="#{perfil.PERFCodigo}"/>
</p:column>
<p:column headerText="Nome" filterBy="#{perfil.PERFNome}" filterMatchMode="contains">
<h:outputText value="#{perfil.PERFNome}"/>
</p:column>
</p:dataTable>
<p:confirmDialog header="Confirmação de Exclusão" widgetVar="confirmacao" severity="alert"
message="Deseja realmente excluir este Perfil?" showEffect="bounce" hideEffect="explode">
<p:commandButton value="Sim" update="tabelaPerfis,msgs" oncomplete="confirmacao.hide()" action="#{perfilBean.excluir}" ajax="false"/>
<p:commandButton value="Não" onclick="confirmacao.hide()" type="button"/>
</p:confirmDialog>
</ui:define>
</ui:composition>
</html>
Só para constar, não uso faces-config, pois uso as annotations para os bean e tbm uso o redirecionamento implicito do JSF 2.0.
Agradeço a ajuda de vcs.
