Alguém sabe de um tutorial que ensine como fazer CRUD em JSF 2.0 com o escope de requisição?
Todos que encontro em revistas e na internet usam o escopo de sessão. E pelo que eu pode perceber em muitos comentários em foruns, não é aconselhável utilizar somente o escopo de sessão.
Se você quiser usar com request scope é tranquilo, mas você irá precisa de setar o ID dos objetos o tempo todo e não utilizar nenhum richfaces, primefaces da vida.
[quote=jakefrog]Se você quiser usar com request scope é tranquilo, mas você irá precisa de setar o ID dos objetos o tempo todo e não utilizar nenhum richfaces, primefaces da vida.
O ideal mesmo é utilizar view scope.[/quote]
Amigo não entendi o motivo de não poder utilizar primefaces com RequestScoped. Poderia explicar melhor ?
[quote=hugo.hlcxcx][quote=jakefrog]Se você quiser usar com request scope é tranquilo, mas você irá precisa de setar o ID dos objetos o tempo todo e não utilizar nenhum richfaces, primefaces da vida.
O ideal mesmo é utilizar view scope.[/quote]
Amigo não entendi o motivo de não poder utilizar primefaces com RequestScoped. Poderia explicar melhor ?[/quote]O primefaces dá todos os exemplos utilizando session. Ele precisa das informações do datatable na memória para funcionar, por isso ele funciona também com viewscoped também.
Faça um exemplo em que um h:datatable que funcione com requestscoped e depois troque de h:datatable para p:datatable que você vai ver o resultado, o trem não funciona por nada. [=
Se quiser um modo mais rápido ainda, nesse post: Lazy JSF Datatable Pagination (Primefaces) tem um código pronto para download. Faça o download e execute uma vez com viewscoped. Depois tente trocar para requestscope, você verá erros acontecendo no seu console.
Obrigado por terem respondido. Irei fazer um teste como exemplo do blog do jakefrog.
Tentei fazer fazer uma paginação utilizando beans no scopo de requisição e não funcionou. só funcionou quando utilizei a tag t:saveState, para manter o estado bean.
diante disso, eu gostaria de saber se @viewScoped e mesma coisa que usar o t:saveState.
No caso do t:saveState, o estado do objeto é mantido na memoria do servidor?
Se coloco o Bean dessa tela como ViewScoped funciona que é uma beleza! Mas queria trabalhar com @RequestScoped e ai é o problema!
Se o bean ta request parece que eu perco a referencia dos “objetos” da tabela"…
Quando coloco como request ele mata a arvore de componentes que estao na tela? é isso? já li bastante sobre os escopos mas não sei se entendi bem essa nova maneira de pensar!
Certo,mas pq não funcionaria com rich:dataTable?[/quote]Com rich não sei te falar. Com primefaces não funcionou de modo normal não. Por algum motive ele não aceita que o scope seja request e não consegue localizar os dados selecionados no datatable.
Eu ouvi alguém falando que a solução era setar o rowIndex do primefaces antes de que ele tente localizar os dados no datatable, mas não testei.
JakeFrog, dá uma mão aki.
É o seguinte; tenho uma consulta, que funciona da seguinte maneira:
Quando o usuário submeter o valor através de um autocomplete do primefaces, deverá retornar uma pesquisa através de um like.
Gostaria de paginar o resultado, mas estou infrentando um problema. Quero faze-lo com primefaes, então, quando uso o scopo View o autocomplete pára de funcionar e a página não é direcionada. se uso requestScoped, o autocomplete funciona, porém não pagina.
e aí o que eu faço?
@ManagedBean
@RequestScoped
public class EmpresaBean {
private Empresa empresa = new Empresa();
private EmpresaRN empresaRN = new EmpresaRN();
private List<Empresa> empresas;
private List<Empresa> pesquisa;
private String destinoSalvar;
// Retorna a página para a inserçao de novos valores
public String novo() {
this.destinoSalvar = "empresaSucesso";
this.empresa = new Empresa();
return "empresa";
}
// Persiste objetos
public String salvar() {
FacesContext context = FacesContext.getCurrentInstance();
if (isEmpresaCadastrada(empresa)) {
FacesMessage facesMessage = new FacesMessage(
"Digite um nome diferente de empresa, esta já está cadastrada.");
context.addMessage(null, facesMessage);
return null;
}
empresaRN.salvar(this.empresa);
return "empresaSucesso";
}
// Direciona à pagina editar
public String editar() {
return "/admin/empresa";
}
// Exclui objetos
public String excluir() {
empresaRN.excluir(this.empresa);
this.empresas = null;
return null;
}
// Autocompleta
public List<Empresa> autocompleteEmpresa(String query) {
List<Empresa> queryResults = new ArrayList<Empresa>();
if (this.empresas == null) {
this.empresas = empresaRN.complete();
}
for (Empresa e : empresas) {
if (e.getNome().startsWith(query)) {
queryResults.add(e);
}
}
return queryResults;
}
// Lista todos os valores
public List<Empresa> getLista() {
if (this.empresas == null) {
this.empresas = empresaRN.listar();
}
return this.empresas;
}
// Lista com base nos nomes
public List<Empresa> buscarPorNome() {
if (this.empresas == null) {
String nome = empresa.getNome();
empresas = empresaRN.buscaPorNome(nome);
}
return this.empresas;
}
// Verifica se já está cadastrada, caso positivo, valida na view.
public boolean isEmpresaCadastrada(Empresa empresa) {
return empresaRN.verificaEmpresa(empresa.getNome());
}
// GETERS/SETERSS
public Empresa getEmpresa() {
return empresa;
}
public void setEmpresa(Empresa empresa) {
this.empresa = empresa;
}
public EmpresaRN getEmpresaRN() {
return empresaRN;
}
public void setEmpresaRN(EmpresaRN empresaRN) {
this.empresaRN = empresaRN;
}
public List<Empresa> getEmpresas() {
return empresas;
}
public void setEmpresas(List<Empresa> empresas) {
this.empresas = empresas;
}
public String getDestinoSalvar() {
return destinoSalvar;
}
public void setDestinoSalvar(String destinoSalvar) {
this.destinoSalvar = destinoSalvar;
}
public List<Empresa> getPesquisa() {
return pesquisa;
}
public void setPesquisa(List<Empresa> pesquisa) {
this.pesquisa = pesquisa;
}
}
action="#{funcionarioBean.editarFuncionario}"> retorna uma String e direciona para a página de edicao.
action="#{funcionarioBean.excluirFuncionario}"> retorna uma String e direciona para a página de exclusao.
O ajax que tava melando tudo! Daí só foi setar o bichin false que funcionou blz.