Boa noite caros, estou aprendendo a desenvolver apps utilizando jsf e gostaria de tirar uma dúvida em relação ao comportamento de managed beans em escopo de request. Tenho uma JSP com um combobox que preencho com objetos do tipo Usuario, e dentro do método get desta propriedade no managed bean (getUsuarioComboList), realizo uma consulta no banco e preencho uma list de selectItems com o resultado. Olhando a saída no console, vi que ao clicar no botão pesquisar e chamar o método executarPesquisa dentro do mesmo managed bean(que retorna para mesma jsp), o método getUsuarioComboList foi chamado 3 vezes, consequentemente executando o select no banco 3x, para evitar isso declarei uma variável de instância para guardar o resultado da pesquisa e passei a verificar se a mesma estaria nula para então chamar a consulta ao banco. Essas 3 chamadas estariam relacionadas as diversas fases dentro do ciclo de vida da requisição???
[]'s.
Não consegui, compreender corretamente o seu problema, mas se já tentou colocar @ViewScope no lugar de @RequestScope?
Tenho os seguintes elementos na JSP:
<h:selectOneMenu value="#{manterUsuarioMBean.usuarioPojo.id}" >
<f:selectItems value="#{manterUsuarioMBean.usuarioComboList}"/>
</h:selectOneMenu>
<h:commandButton
action="#{manterUsuarioMBean.pesquisarUsuarios}"
value="pesquisar" />
e no managed bean:
public List<SelectItem> getUsuarioComboList() {
if (usuarioList == null) {
usuarioList = (List<Usuario>) ejbUsuario.getDaoInstance().findByFilter(new Usuario(), filterInstance);
}
List<SelectItem> items = new ArrayList<SelectItem>();
for (Usuario usuario : usuarioList) {
items.add(new SelectItem(usuario.getId(), usuario.getNome()));
}
return items;
}
public String pesquisarUsuarios() {
System.out.println("public String pesquisarUsuarios()");
if (isFormularioValido()) {
getFilterInstance().addRestriction("nome", ((Usuario) entityInView).getNome(), FilterOperator.OPERATOR_LIKE);
this.table = new ListDataModel((List<Usuario>) ejbUsuario.getDaoInstance().findByFilter(entityInView,
getFilterInstance()));
return null;
} else {
addFacesMessage("Ao menos um campo deve ser preenchido", FacesMessage.SEVERITY_WARN);
}
return null;
}
A pergunta é: porque o método getUsuarioComboList, que retorna a lista do componente selectOneMenu, é invocado 3 vezes quando eu clico no botão pesquisar (que retorna para a mesma jsp) :idea: Adicionei o IF para evitar as 3 chamadas ao banco de dados :idea: Estou lendo http://www.ibm.com/developerworks/library/j-jsf2/ tentando entender melhor o ciclo… enquanto ao mesmo tempo tento assistir a alemanha x inglaterra