Ola,
Nao queria usar @SessionScoped, e a unica solucao que achei para nao usar o session foi dessa forma? Porque quando eu uso o @RequestScoped, a pagina nao aciona o metodo alterar(). Outra coisa que achei estranha eh que com o request se eu carregar o datamodel no metodo init() no scopo de request a navegacao entre as paginas funciona perfeitamente, cadastrar, alterar,listar,excluir. Mas se eu executar pesquisar apos, e seleciona na lista, nao funciona. Entao com o viewscoped colocando o atributo na sessao e depois removendo deu ideia de gambiarra, ou a mesma coisa de usar sessao.
Mas usando dessa forma, economizaria recursos do servidor ou da na mesma coisa de usar sessao?
`@ManagedBean
@ViewScoped
public class SecaoController implements Serializable {
private Secao secao;
private SecaoDao dao = new SecaoDao();
private String parametroPesquisa;
private DataModel<Secao> secoes;
public SecaoController() {
}
@PostConstruct
public void init() {
secao = (Secao) FacesUtil.recuperarDaSessao("secao");
if (secao == null) {
secao = new Secao();
}
secoes = new ListDataModel<>();
}
public Secao getSecao() {
return secao;
}
public void setSecao(Secao secao) {
this.secao = secao;
}
public DataModel<Secao> getSecoes() {
return secoes;
}
public void setSecoes(DataModel<Secao> secoes) {
this.secoes = secoes;
}
public String getParametroPesquisa() {
return parametroPesquisa;
}
public void setParametroPesquisa(String parametroPesquisa) {
this.parametroPesquisa = parametroPesquisa;
}
/*
* CRUD
*/
public String cadastrar() {
secao = new Secao();
return "cadastrar.faces";
}
public String salvar() {
dao.salvar(secao);
secao = new Secao();
FacesUtil.removerDaSessao("secao");
return "pesquisar.faces";
}
public String alterar() {
secao = secoes.getRowData();
FacesUtil.salvarEmSessao("secao", secao);
return "alterar.faces";
}
public String excluir() {
return null;
}
public void listar() {
secoes = new ListDataModel<>(dao.listar(parametroPesquisa));
}
}
`