Gente Ajuda aeeee.
Tenho uma tabela de estabeleciementos quando clico no botao dentro da tabela ele mostra um dialog com os dados do estabelecimento selecionado. Soque ao mostrar o DIALOG com sessionscoped o id da linha selecionada na tabela desaparece (chamei o atributo de estabelecimentoselecionado). logo apos de mostrar os dados no dialog. mas eu precisava que esse valor se mantivesse sempre nessa sessao.
Bem consegui resolver o problema modificando de session scoped para application scoped mas ai tive um outro problema ao fazer logout na aplicacao e fazendo login novamente com um usuairo diferente ele mostra os dados do primeiro usuario logado.
## JSF
<?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:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
xmlns:fn="http://java.sun.com/jsp/jstl/functions">
<ui:composition template="_template.xhtml">
<ui:define name="titulo">
Visualizar Estabelecimentos
</ui:define>
<ui:define name="conteudo">
<h:form id="formulario">
<p:growl id="msgs" showDetail="true" autoUpdate="true" />
<p:fieldset legend="Visualizar Estabelecimentos">
<p:dataTable id="basicDT" var="estabelecimento"
value="#{estabelecimentoBean.estabelecimentosModel}"
editable="true" paginator="true" rows="10">
<p:ajax event="rowEdit" listener="#{estabelecimentoBean.onRowEdit}"
update=":formulario:msgs" />
<p:ajax event="rowEditCancel"
listener="#{estabelecimentoBean.onRowCancel}"
update=":formulario:msgs" />
<p:column headerText="Nome"
sortBy="#{estabelecimento.nomeEstabelecimento}"
filterBy="#{estabelecimento.nomeEstabelecimento}">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{estabelecimento.nomeEstabelecimento}" />
</f:facet>
<f:facet name="input">
<p:inputText value="#{estabelecimento.nomeEstabelecimento}"
style="width:76%" immediate="true"
validatorMessage="O nome nao pode ser superior a 40 caracteres"
required="true">
<f:validateLength maximum="40" />
<f:ajax event="blur" />
</p:inputText>
</f:facet>
</p:cellEditor>
</p:column>
<p:column headerText="Avenida"
sortBy="#{estabelecimento.local.avenida}"
filterBy="#{estabelecimento.local.avenida}">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{estabelecimento.local.avenida}" />
</f:facet>
<f:facet name="input">
<p:inputText value="#{estabelecimento.local.avenida}"
style="width:76%" label="Descricao" immediate="true" />
</f:facet>
</p:cellEditor>
</p:column>
<p:column headerText="Telefone"
sortBy="#{estabelecimento.contacto.telefone}"
filterBy="#{estabelecimento.contacto.telefone}">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{estabelecimento.contacto.telefone}" />
</f:facet>
<f:facet name="input">
<p:inputText value="#{estabelecimento.contacto.telefone}"
style="width:76%" label="Descricao" immediate="true" />
</f:facet>
</p:cellEditor>
</p:column>
<p:column headerText="Celular"
sortBy="#{estabelecimento.contacto.celular_principal}"
filterBy="#{estabelecimento.contacto.celular_principal}">
<p:cellEditor>
<f:facet name="output">
<h:outputText
value="#{estabelecimento.contacto.celular_principal}" />
</f:facet>
<f:facet name="input">
<p:inputText
value="#{estabelecimento.contacto.celular_principal}"
style="width:76%" label="Descricao" immediate="true" />
</f:facet>
</p:cellEditor>
</p:column>
<p:column headerText="Email"
sortBy="#{estabelecimento.contacto.email}"
filterBy="#{estabelecimento.contacto.email}">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{estabelecimento.contacto.email}" />
</f:facet>
<f:facet name="input">
<p:inputText value="#{estabelecimento.contacto.email}"
style="width:76%" label="Descricao" immediate="true" />
</f:facet>
</p:cellEditor>
</p:column>
<p:column style="width:32px">
<p:commandButton
update="formulario"
oncomplete="PF('estabelecimentoDialog').show()"
icon="ui-icon-search" title="Visualizar">
<f:setPropertyActionListener value="#{estabelecimento}"
target="#{estabelecimentoBean.estabelecimentoSelecionado}" />
</p:commandButton>
</p:column>
<p:column style="width:32px">
<p:rowEditor editTitle="Editar" />
</p:column>
</p:dataTable>
<p:dialog header="Estabelecimento Info"
widgetVar="estabelecimentoDialog" modal="true" showEffect="fade"
hideEffect="fade" resizable="true" fitViewport="true" responsive="true" position="center">
<p:outputPanel id="estabelecimentoDetail">
<p:panelGrid columns="1" style="margin: 0 auto;"
rendered="#{not empty estabelecimentoBean.estabelecimentoSelecionados}"
columnClasses="label,value">
<p:imageSwitch effect="wipe" widgetVar="switcher"
id="manuelSwitcher" slideshowAuto="false">
<ui:repeat value="#{eventoBean.listaImagens}" var="image"
id="manuelSwitcherImages">
<p:graphicImage value="#{eventoBean.image}" height="250"
width="550" style="horizontal-align: center;">
<f:param name="id" value="#{image.id}" />
</p:graphicImage>
</ui:repeat>
</p:imageSwitch>
</p:panelGrid>
<p:panelGrid columns="2" style="margin: 0 auto;"
rendered="#{not empty estabelecimentoBean.estabelecimentoSelecionados}"
columnClasses="label,value">
<p:commandButton type="button"
onclick="PF('switcher').previous();"
icon="ui-icon-circle-triangle-w" id="prev" title="Voltar" />
<p:commandButton type="button" onclick="PF('switcher').next();"
icon="ui-icon-circle-triangle-e" id="next" title="Proximo" />
</p:panelGrid>
<p:panelGrid columns="4"
rendered="#{not empty estabelecimentoBean.estabelecimentoSelecionados}"
columnClasses="label,value" style="width: 100%;">
<h:outputText value="Nome:" style="font-weight:bold" />
<h:outputText
value="#{estabelecimentoBean.estabelecimentoSelecionado.nomeEstabelecimento}" />
<h:inputHidden width="1" />
<h:inputHidden width="1" />
<h:outputText value="Avenida" style="font-weight:bold" />
<h:outputText
value="#{estabelecimentoBean.estabelecimentoSelecionado.local.avenida}" />
<h:outputText value="Número" style="font-weight:bold" />
<h:outputText
value="#{estabelecimentoBean.estabelecimentoSelecionado.local.numero}" />
<h:outputText value="Telefone" style="font-weight:bold" />
<h:outputText
value="#{estabelecimentoBean.estabelecimentoSelecionado.contacto.telefone}" />
<h:inputHidden width="1" />
<h:inputHidden width="1" />
<h:outputText value="Celular" style="font-weight:bold" />
<h:outputText
value="#{estabelecimentoBean.estabelecimentoSelecionado.contacto.celular_principal}" />
<h:inputHidden width="1" />
<h:inputHidden width="1" />
<h:outputText value="E-mail" style="font-weight:bold" />
<h:outputText
value="#{estabelecimentoBean.estabelecimentoSelecionado.contacto.email}" />
<h:inputHidden width="1" />
<h:inputHidden width="1" />
<h:outputText value="Inicio de actividade:"
style="font-weight:bold" />
<h:outputText
value="#{estabelecimentoBean.estabelecimentoSelecionado.dataEhoradeOperacaoInicio.time}">
<f:convertDateTime pattern="dd/MM/yyyy HH:mm"
timeZone="Africa/Harare" />
</h:outputText>
<h:outputText value="Final das actividades:"
style="font-weight:bold" />
<h:outputText
value="#{estabelecimentoBean.estabelecimentoSelecionado.dataEhoradeOperacaoFim.time}">
<f:convertDateTime pattern="dd/MM/yyyy HH:mm"
timeZone="Africa/Harare" />
</h:outputText>
</p:panelGrid>
<p:panelGrid id="estabelecimentoDetail1" columns="1"
rendered="#{not empty estabelecimentoBean.estabelecimentoSelecionados}"
columnClasses="label,value" style="width: 100%;">
<p:inputTextarea
value="#{estabelecimentoBean.estabelecimentoSelecionado.descricaoEstabelecimento}"
cols="72" rows="4" readonly="true" title="Descrição do evento" />
<p:fileUpload
fileUploadListener="#{estabelecimentoBean.handleFileUpload}"
mode="advanced" label="Escolher" uploadLabel="Carregar"
multiple="true" cancelLabel="Cancelar" dragDropSupport="true"
sizeLimit="10000000" allowTypes="/(\.|\/)(gif|jpe?g|png)$/" />
</p:panelGrid>
</p:outputPanel>
</p:dialog>
</p:fieldset>
</h:form>
</ui:define>
</ui:composition>
</html>
## Bean
package mz.co.mpteventos.springsecurity.bean;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ApplicationScoped;
import javax.faces.bean.ManagedBean;
import javax.faces.context.FacesContext;
import javax.faces.event.PhaseId;
import org.apache.commons.io.IOUtils;
import org.primefaces.event.FileUploadEvent;
import org.primefaces.event.RowEditEvent;
import org.primefaces.model.DefaultStreamedContent;
import org.primefaces.model.StreamedContent;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import mz.co.mpteventos.springsecurity.dao.DAO;
import mz.co.mpteventos.springsecurity.model.Contacto;
import mz.co.mpteventos.springsecurity.model.Estabelecimento;
import mz.co.mpteventos.springsecurity.model.EstabelecimentoDataModel;
import mz.co.mpteventos.springsecurity.model.Evento;
import mz.co.mpteventos.springsecurity.model.Imagem;
import mz.co.mpteventos.springsecurity.model.Local;
@ManagedBean
@ApplicationScoped
public class EstabelecimentoBean {
private Estabelecimento estabelecimento = new Estabelecimento();
private Estabelecimento estabelecimentoSelecionado;
private List<Estabelecimento> listaEstabelecimentosFiltradosPeloNome;
private List<Estabelecimento> estabelecimentoSelecionados;
private EstabelecimentoDataModel estabelecimentosModel;
private List<Local> listaLocais;
private List<Contacto> listaContactos;
private List<Evento> listaeventos;
private Imagem imagem;
public EstabelecimentoBean() {
listaEstabelecimentosFiltradosPeloNome = new DAO<Estabelecimento>(Estabelecimento.class)
.filtrarEstabelecimentoPeloNome(pegarUsuarioDaSessao());
estabelecimentoSelecionados = new DAO<Estabelecimento>(Estabelecimento.class)
.filtrarEstabelecimentoPeloNome(pegarUsuarioDaSessao());
listaLocais = new DAO<Local>(Local.class).listaTodos();
listaContactos = new DAO<Contacto>(Contacto.class).listaTodos();
listaeventos = new DAO<Evento>(Evento.class).listaTodos();
estabelecimentosModel = new EstabelecimentoDataModel(listaEstabelecimentosFiltradosPeloNome);
}
public void handleFileUpload(FileUploadEvent event) throws IOException {
try {
this.imagem = new Imagem();
InputStream is = event.getFile().getInputstream();
// código usando Apache Commons IO
byte[] bytes = IOUtils.toByteArray(is);
this.imagem.setArquivo(bytes);
this.imagem.setNomeArquivo(event.getFile().getFileName());
this.imagem.setEstabelecimento(getEstabelecimentoSelecionado());
new DAO<Imagem>(Imagem.class).adiciona(this.imagem);
FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO,
event.getFile().getFileName() + " is uploaded.", null);
FacesContext.getCurrentInstance().addMessage(null, message);
} catch (Exception e) { // TODO: handle exception
e.printStackTrace();
}
}
public StreamedContent getImage() throws IOException {
FacesContext context = FacesContext.getCurrentInstance();
if (context.getCurrentPhaseId() == PhaseId.RENDER_RESPONSE) {
// So, we're rendering the HTML. Return a stub StreamedContent so that it will generate right URL.
return new DefaultStreamedContent();
} else {
// So, browser is requesting the image. Return a real StreamedContent with the image bytes.
String imageId = context.getExternalContext().getRequestParameterMap().get("id");
Imagem image = new DAO<Imagem>(Imagem.class).buscaPorId((Integer.valueOf(imageId)));
return new DefaultStreamedContent(new ByteArrayInputStream(image.getArquivo()));
}
}
private String pegarUsuarioDaSessao() {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
String currentPrincipalName = authentication.getName();
return currentPrincipalName.toString();
}
public void onRowEdit(RowEditEvent event) {
Estabelecimento estabelecimento = (Estabelecimento) event.getObject();
new DAO<Estabelecimento>(Estabelecimento.class).atualiza(estabelecimento);
FacesMessage msg = new FacesMessage("Estabelecimento Editado",
((Estabelecimento) event.getObject()).getNomeEstabelecimento());
FacesContext.getCurrentInstance().addMessage(null, msg);
}
public void onRowCancel(RowEditEvent event) {
FacesMessage msg = new FacesMessage("Edit Cancelled",
((Estabelecimento) event.getObject()).getNomeEstabelecimento());
FacesContext.getCurrentInstance().addMessage(null, msg);
}
// getters & setters
public List<Estabelecimento> getEstabelecimentoSelecionados() {
return estabelecimentoSelecionados;
}
public void setEstabelecimentoSelecionados(List<Estabelecimento> estabelecimentoSelecionados) {
this.estabelecimentoSelecionados = estabelecimentoSelecionados;
}
public Estabelecimento getEstabelecimentoSelecionado() {
return estabelecimentoSelecionado;
}
public void setEstabelecimentoSelecionado(Estabelecimento estabelecimentoSelecionado) {
this.estabelecimentoSelecionado = estabelecimentoSelecionado;
}
public Estabelecimento getEstabelecimento() {
return estabelecimento;
}
public void setEstabelecimento(Estabelecimento estabelecimento) {
this.estabelecimento = estabelecimento;
}
public List<Local> getListaLocais() {
return listaLocais;
}
public void setListaLocais(List<Local> listaLocais) {
this.listaLocais = listaLocais;
}
public List<Contacto> getListaContactos() {
return listaContactos;
}
public void setListaContactos(List<Contacto> listaContactos) {
this.listaContactos = listaContactos;
}
public List<Evento> getListaeventos() {
return listaeventos;
}
public void setListaeventos(List<Evento> listaeventos) {
this.listaeventos = listaeventos;
}
public List<Estabelecimento> getListaEstabelecimentosFiltradosPeloNome() {
return listaEstabelecimentosFiltradosPeloNome;
}
public void setListaEstabelecimentosFiltradosPeloNome(
List<Estabelecimento> listaEstabelecimentosFiltradosPeloNome) {
this.listaEstabelecimentosFiltradosPeloNome = listaEstabelecimentosFiltradosPeloNome;
}
public EstabelecimentoDataModel getEstabelecimentosModel() {
return estabelecimentosModel;
}
public void setEstabelecimentosModel(EstabelecimentoDataModel estabelecimentosModel) {
this.estabelecimentosModel = estabelecimentosModel;
}
public Imagem getImagem() {
return imagem;
}
public void setImagem(Imagem imagem) {
this.imagem = imagem;
}
}
## Modelo
package mz.co.mpteventos.springsecurity.model;
import java.util.Calendar;
import java.util.List;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Entity
public class Estabelecimento {
@Id
@GeneratedValue
private Integer id;
private String nomeEstabelecimento;
private String descricaoEstabelecimento;
@Temporal(TemporalType.TIMESTAMP)
private Calendar dataEhoradeOperacaoInicio = Calendar.getInstance();
@Temporal(TemporalType.TIMESTAMP)
private Calendar dataEhoradeOperacaoFim = Calendar.getInstance();
@OneToOne
private Contacto contacto;
@OneToOne
private Local local;
@ManyToOne
private Conta conta;
@OneToMany
private List<Imagem> imagem;
// getters & setters
public Contacto getContacto() {
return contacto;
}
public void setContacto(Contacto contacto) {
this.contacto = contacto;
}
public Integer getId() {
return id;
}
public String getNomeEstabelecimento() {
return nomeEstabelecimento;
}
public void setNomeEstabelecimento(String nomeEstabelecimento) {
this.nomeEstabelecimento = nomeEstabelecimento;
}
public Local getLocal() {
return local;
}
public void setLocal(Local local) {
this.local = local;
}
public void setId(Integer id) {
this.id = id;
}
public String getDescricaoEstabelecimento() {
return descricaoEstabelecimento;
}
public void setDescricaoEstabelecimento(String descricaoEstabelecimento) {
this.descricaoEstabelecimento = descricaoEstabelecimento;
}
public Calendar getDataEhoradeOperacaoInicio() {
return dataEhoradeOperacaoInicio;
}
public void setDataEhoradeOperacaoInicio(Calendar dataEhoradeOperacaoInicio) {
this.dataEhoradeOperacaoInicio = dataEhoradeOperacaoInicio;
}
public Calendar getDataEhoradeOperacaoFim() {
return dataEhoradeOperacaoFim;
}
public void setDataEhoradeOperacaoFim(Calendar dataEhoradeOperacaoFim) {
this.dataEhoradeOperacaoFim = dataEhoradeOperacaoFim;
}
public Conta getConta() {
return conta;
}
public void setConta(Conta conta) {
this.conta = conta;
}
public List<Imagem> getImagem() {
return imagem;
}
public void setImagem(List<Imagem> imagem) {
this.imagem = imagem;
}
}
