MInha duvida é, tendo um managedBean um scopo session, o construtor dele será chamado uma única vez ou será chamado cada vez que algum evento dele for requisitado?
Obrigado.
MInha duvida é, tendo um managedBean um scopo session, o construtor dele será chamado uma única vez ou será chamado cada vez que algum evento dele for requisitado?
Obrigado.
Você fez o teste? O que aconteceu?
Bom, vou tentar explicar o que estou tentando fazer.
O meu managedBean é responsável por pegar uma lista de filmes de um determinado gênero e devolver para a página JSF. Acontece que cada vez que o usuário carrega a mesma pagina do mesmo gênero vai aparecendo as mesmas opções de filmes, é como se cada vez que o usuário acessa a pagina o managedBean coloca os mesmos filmes na lista de filmes do gênero.
Tentei resolver essa questão usando uma variável Boolean para cada gênero, sendo que verdadeiro caso ele já tenha armazenado os filmes na lista e falso caso necessite armazena-los. No entanto, segue o meu problema, cada vez que acesso a mesma pagina, ela vai adicionando as já existentes as mesmas opções sucessivamente.
O codigo da pagina
<?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:p="http://primefaces.org/ui"
xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Locadora do Zamba</title>
</h:head>
<h:body>
<p:breadCrumb>
<p:menuitem value="categories" url="principal2.xhtml" />
<p:menuitem value="Drama" url="drama.xhtml" />
<p:menuitem value="Romance" url="romance.xhtml"/>
<p:menuitem value="Ficção" url="ficcao.xhtml" />
<p:menuitem value="Terror" url="terror.xhtml" />
<p:menuitem value="Suspense" url="suspense.xhtml" />
</p:breadCrumb>
<h:outputText value="Usuario:" />
<h:outputText value="#{usuarioManagedBean.usuario.login}" />
<h:outputText value=" esta conectado." />
<br />
<br />
<h:form>
<h:commandLink value="Deslogar" action="#{usuarioManagedBean.deslogar}" />
</h:form>
<h:form>
<h:outputText value="Filmes genero Drama"/>
<h:selectManyCheckbox value="#{usuarioManagedBean.filmeSelecionados}">
<f:selectItems value="#{usuarioManagedBean.dramaFilmes}"/>
</h:selectManyCheckbox>
<h:commandButton value="submit" action="#{usuarioManagedBean.gravar}"/>
</h:form>
</h:body>
</html>
o do managedBean
package pojo;
import java.util.List;
import java.util.ArrayList;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import pojo.Usuario;
import javax.faces.application.FacesMessage;
import java.sql.*;
import java.io.*;
@ManagedBean
@SessionScoped
public class UsuarioManagedBean {
private List<String> listaFilmes;
private List<String> filmeSelecionados=new ArrayList<String>();
private List<String> dramaFilmes=new ArrayList<String>();
private Usuario usuario;
private Validador validador;
private Boolean checkDrama;
public UsuarioManagedBean(){
usuario=new Usuario();
listaFilmes=new ArrayList<String>();
checkDrama=false;
}
public List<String> getDramaFilmes() {
if(!checkDrama){
dramaFilmes=carregaFilmes("drama");
checkDrama=true;
}
return dramaFilmes;
}
public void setDramaFilmes(List<String> dramaFilmes) {
this.dramaFilmes = dramaFilmes;
}
public List<String> getFilmeSelecionados(){
return filmeSelecionados;
}
public void setFilmeSelecionados(List<String> filmeSelecionados){
this.filmeSelecionados=filmeSelecionados;
}
public Usuario getUsuario(){
return usuario;
}
public void setUsuario(Usuario usuario){
this.usuario=usuario;
}
public String logar(){
validador=new Validador();
if(validador.validar(usuario.getLogin(),usuario.getSenha())){
System.out.println("Encontrou o usuario");
return "OK";
}
FacesMessage msg=new FacesMessage("Usuario/senha invalidos");
FacesContext.getCurrentInstance().addMessage("form", msg);
return "";
}
public String deslogar(){
usuario=new Usuario();
return "LOGOUT";
}
public void gravar(){
System.out.println("Gravando...");
//Date date=new Date();
try{
PrintWriter out=new PrintWriter("/pedidos/"+usuario+".txt");
//out.println(date);
out.println(filmeSelecionados);
out.close();
System.out.println("Gravou");
}
catch(IOException e){
System.out.println("Erro:"+e);
}
}
public List<String> carregaFilmes(String genero){
BD bd=new BD();
if(bd.getConnection()){
try{
String sql="select nome from filmes where genero=?";
PreparedStatement statement=bd.connection.prepareStatement(sql);
statement.setString(1,genero);
ResultSet resultSet=statement.executeQuery();
while(resultSet.next()){
listaFilmes.add(resultSet.getString("nome"));
}
bd.close();
}
catch(SQLException erro){
System.out.println("Erro encontrado:" + erro);
}
}
return listaFilmes;
}
}
Para quem tiver a mesma duvida que kmunga, basta usar o @PostConstruct
@PostConstruct
public void init(){
usuario=new Usuario();
listaFilmes=new ArrayList<String>();
checkDrama=false;
}