Dificuldade em fazer metodo no Bean para Lista Usuarios por Nome ( jsf + hibernate )

Eu quero fazer com que aparece a lista dos nomes semelhantes.
Ex: Eu quero Alexandre:
Logo é para Lista todos os Alexandres: Alexandre Lima, Alexandre Menezes e etc
Só que quando eu chamo o método lista por nomes o JSF que o metodo tem que ser String não pode ser List…
Eu como eu faço esse método sendo String?

Alguem pode mi ajudar

VLW!!

Como está seu método atualmente?

Assim:

Bean:

[code]public List pesquisaByNomes(){
AlunoFacadeImpl alunoService = new AlunoFacadeImpl();
List lista = alunoService.procuraByNomes(this.aluno.getNome());

	return lista;
}[/code]

Façade:

[code]public List pesquisaAlunosByNome(String nome) {
sf = new AnnotationConfiguration().configure().buildSessionFactory();
session = sf.openSession();
tx = session.beginTransaction();
alunoDAO = new AlunoDAO(session, Aluno.class);

	List<Aluno> lista = this.alunoDAO.pesquisaAlunos(nome);
	tx.commit();
	session.close();
	
	return lista;
}[/code]

DAO:

[code]@SuppressWarnings(“unchecked”)
public List pesquisaAlunos(String nome){
Criteria c = session.createCriteria(Aluno.class);
c.add(Restrictions.like(“nome”, “%” + nome + “%”));

	@SuppressWarnings("rawtypes")
	List resultado = c.list();
	return resultado;
	
}[/code]

Na hora de listar, coloque assim

List<String> resultado = new ArrayList<Aluno>(); for(Aluno aluno : alunos){ resultado.add(aluno.getNome()); }

[quote=jakefrog]Na hora de listar, coloque assim

List<String> resultado = new ArrayList<Aluno>(); for(Aluno aluno : alunos){ resultado.add(aluno.getNome()); }[/quote]

Coloca isso no Façade?
Oq é essa variável alunos ?
Qual vai ser o retorno?

alunos é o retorno da sua consulta, ela não retorna um List? Eu chamei de alunos.

Por mim você coloca isso no seu ManagedBean, após chamar seu EJB.

[quote=jakefrog]alunos é o retorno da sua consulta, ela não retorna um List? Eu chamei de alunos.

Por mim você coloca isso no seu ManagedBean, após chamar seu EJB. [/quote]

OK

Mais aparece isso:

Type mismatch: cannot convert from ArrayList<Aluno> to List <String>

Nessa linha:

List<String> resultado = new ArrayList<Aluno>();

Escrevi errado, é só trocar para List resultado = new ArrayList();

OK!
Agora meu Bean ta assim:

public List<Aluno> pesquisaByNomes(){ AlunoFacadeImpl alunoService = new AlunoFacadeImpl(); List<Aluno> lista = alunoService.procuraByNomes(this.aluno.getNome()); List<String> resultado = new ArrayList<String>(); for(Aluno aluno : lista){ resultado.add(aluno.getNome()); } return lista; }

E fica aparecendo isso no meu .jsp:

Method must signature "String method()" but has signature "List method()"

Tem algum problema ainda?

O seu método da JSP tem que retornar uma lista de String.

Como assim?

O meu .jsp ta assim:

[code]
Pesquisa de Alunos

<h:panelGrid columns=“2”>
		    <h:outputLabel for="Nome" value="Digite o nome: " />
			<h:inputText id="Nome" value="#{alunoBean.aluno.nome}" style=" width : 321px;" />

			<h:commandButton value="Pesquisar" action="#{alunoBean.pesquisaByNomes}" styleClass="botoes"/>
		
		
		</h:panelGrid>
		
		<h:panelGrid columnClasses="acent">
        <rich:datascroller  for="table" maxPages="5" />
        <rich:dataTable value="#{alunoBean.alunos}" var="al" id="table" rows="10">
            <rich:column >
                <f:facet name="header">
                    <h:outputText value="Aluno " />
                </f:facet>
                <h:outputText value="#{alunoBean.aluno.nome}" />
            </rich:column>
            <rich:column>
                <f:facet name="header">
                    <h:outputText value="Turma" />
                </f:facet>
                <h:outputText value="#{alunoBean.aluno.turma}" />
            </rich:column>
            <rich:column>
                <f:facet name="header">
                    <h:outputText value="Celular" />
                </f:facet>
                <h:outputText value="#{alunoBean.aluno.telCel}" />
            </rich:column>
            <rich:column>
                <f:facet name="header">
                    <h:outputText value="Responsavel" />
                </f:facet>
                <h:outputText value="#{alunoBean.aluno.responsavel}" />
            </rich:column>
            
        </rich:dataTable>
        <rich:datascroller for="table" maxPages="5" />
    </h:panelGrid>
		
		</div>
		</fieldset>[/code]

Cara, agora não entendi mais nada.

Você quer oq? Que o método retorne String? Ou ele aceite String como parâmetro? Ou oq? O.o

[quote=jakefrog]Cara, agora não entendi mais nada.

Você quer oq? Que o método retorne String? Ou ele aceite String como parâmetro? Ou oq? O.o[/quote]

Cara eu quero que quando o usuário digita um nome ele liste todos os nomes semelhantes. Ex: Alexandre ele liste todos os Alexandre’s…
E eu não to conseguindo fazer isso… Eu não sei oq ele deve retornar, mais parece que o button não aceita um retorno List…
Entendeu?

Seu método de pesquisa deve ser void e você precisa setar na variável alunos o resultado do seu bean.

Vc está se referindo ao DAO que deve ser void ???

Eu consegui fazer!! :smiley:
Obrigado!! Vcs 2 mi ajudarão bastante a encontra meu erro…
O metodo ficou assim:

[code]public String pesquisaByNomes(){
AlunoFacadeImpl alunoService = new AlunoFacadeImpl();
List lista = alunoService.procuraByNomes(this.aluno.getNome());
List resultado = new ArrayList();
for(Aluno aluno : lista){
resultado.add(aluno.getNome());
}
return “sucesso”;

}[/code]

O problema estava sendo só o retorno… o metodo tem que ser o String se não o na pagina .jsp acusa erro… (Eu acho que é isso pelo mesno…rsrsrs)

Vlw!! Mesmo

Só uma sugestão.Pq ao invés disso:

c.add(Restrictions.like("nome", "%" + nome + "%"));  

Vc não usa assim?

c.add(Restrictions.ilike("nome", nome,MatchMode.ANYWHERE));  

Mais elegante…

Não. O método do managed bean tem que ser void e no final do método você seta em uma variável do managed o resultado que está retornando. Depois na página é só chamar aquela variável.

[quote=raf4ever]Só uma sugestão.Pq ao invés disso:

c.add(Restrictions.like("nome", "%" + nome + "%"));  

Vc não usa assim?

c.add(Restrictions.ilike("nome", nome,MatchMode.ANYWHERE));  

Mais elegante…

[/quote]

Oq isso significa?

MatchMode.ANYWHERE

Mais na pagina pede um método String…
Como faço para ele aceitar?