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

20 respostas
X

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!!

20 Respostas

Hebert_Coelho

Como está seu método atualmente?

X
jakefrog:
Como está seu método atualmente?

Assim:

Bean:
public List<Aluno> pesquisaByNomes(){
		AlunoFacadeImpl alunoService = new AlunoFacadeImpl();
		List<Aluno> lista = alunoService.procuraByNomes(this.aluno.getNome());
		
		return lista;
	}
Façade:
public List<Aluno> 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;
	}
DAO:
@SuppressWarnings("unchecked")
	public List<Aluno> pesquisaAlunos(String nome){
		Criteria c = session.createCriteria(Aluno.class);
		c.add(Restrictions.like("nome", "%" + nome + "%"));
		
		@SuppressWarnings("rawtypes")
		List resultado = c.list();
		return resultado;
		
	}
Hebert_Coelho

Na hora de listar, coloque assim

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

X

jakefrog:
Na hora de listar, coloque assim

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

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

Hebert_Coelho

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.

X

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.

OK

Mais aparece isso:

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

Nessa linha:

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

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

X

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?

Hebert_Coelho

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

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

Como assim?

O meu .jsp ta assim:
<fieldset id='field' style="height: 322px  ">
	        <legend style="font-size: 14px">Pesquisa de Alunos</legend>
			<div align="center"><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>
Hebert_Coelho

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

X

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

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?

esdras_63

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

X

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

X
Eu consegui fazer!! :D Obrigado!! Vcs 2 mi ajudarão bastante a encontra meu erro... O metodo ficou assim:
public String 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 "sucesso";
		
	}
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

R

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…

esdras_63

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.

X

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…

Oq isso significa?

MatchMode.ANYWHERE
X

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

X

Ta dando esse excepetion, mais executa normal, só dá erro se eu tentar passar para outra pagina no datascroller… Alguem sabe o pq?

javax.naming.NamingException: Name is not valid at org.apache.naming.NamingContext.bind(NamingContext.java:836) at org.apache.naming.NamingContext.rebind(NamingContext.java:208) at org.apache.naming.SelectorContext.rebind(SelectorContext.java:207) at javax.naming.InitialContext.rebind(InitialContext.java:412) at org.hibernate.util.NamingHelper.bind(NamingHelper.java:97)

Criado 23 de janeiro de 2012
Ultima resposta 24 de jan. de 2012
Respostas 20
Participantes 4