Passagem de dois parametros usando o VRaptor![Resolvido]

4 respostas
alciara

Olá gente,

Estou precisando passar mais de um atributo para fazer uma busca, estou fazendo dessa forma:

// cidade/edita.jsp

		<tr>
			<td colspan="3"> Busca<SELECT NAME="tipoBusca"
				ID="tipoBuscaid">
				<OPTION VALUE="nome">1- Cidade</OPTION>
				<OPTION VALUE="uf">2- UF</OPTION>
				<OPTION VALUE="codIbgeCidade">3- Código IBGE Cidade</OPTION>
				<OPTION VALUE="codIbgeUf">4- Código IBGE Estado</OPTION>
			</SELECT></td>
			<td colspan="2">
			
			<form action="<c:url value="/cidade/busca"/>"><input
				name="nomeInput" /></form>		
			</td>
		</tr>

sendo que eu preciso passar o "tipoBusca" e o "nameInput"

daí na minha classe CidadeController:

public List<Cidade> busca(String nomeInput,String tipoBusca) {
		
		result.include("nome", nomeInput);
		return dao.busca(nomeInput,tipoBusca);
	}

e na minha classe CidadeDao:

public List<Cidade> busca(String nome, String tipoBusca) {
		if(tipoBusca.equals("name")){
			return session.createCriteria(Cidade.class).add(Restrictions.ilike("nome", nome, MatchMode.ANYWHERE))
			.list();
		}else if (tipoBusca.equals("uf")) {
			return session.createCriteria(Cidade.class).add(Restrictions.ilike("uf", nome, MatchMode.ANYWHERE))
			.list();
		}else if (tipoBusca.equals("codIbgeCidade")) {
			return session.createCriteria(Cidade.class).add(Restrictions.ilike("codibgecidade", nome, MatchMode.ANYWHERE))
			.list();
			
		}else  {
			return session.createCriteria(Cidade.class).add(Restrictions.ilike("codibgeuf", nome, MatchMode.ANYWHERE))
			.list();
		}	
		
	}

bom.. o problema eh que o "tipoBusca", esta vindo NULL..
o que eu preciso fazer para que ele venha preenchido?

outra coisa, se alguém souber q um jeito mais ELEGANTE de se fazer essa busca, me da um Toque! ;D

desde já

Obrigada!

4 Respostas

WashingtonBotelho

Só colocar o dentro do form.
Componentes fora da tag não são submetidos para sua respectiva action.

Uma dica é você utilizar HQL para montar suas buscas personalizadas, evitando assim um monte de if no seu DAO.

alciara

Era isso mesmo Washington!!

=)

obrigada!

e vou dar um pesquisada sobre HQL, realmente eu não gostei desse monte de if!

=)

G

Ao invés do HQL use:

public List<Cidade> busca(String nome, String tipoBusca) {
    Criteria c = session.createCriteria(Cidade.class);
    if(tipoBusca.equals("name")){
        c.add(Restrictions.ilike("nome", nome, MatchMode.ANYWHERE));

    }else if (tipoBusca.equals("uf")) {
        c.add(Restrictions.ilike("uf", nome, MatchMode.ANYWHERE));

    }else if (tipoBusca.equals("codIbgeCidade")) {
        c.add(Restrictions.ilike("codibgecidade", nome, MatchMode.ANYWHERE));

    }else  {
        return session.createCriteria(Cidade.class).add(Restrictions.ilike("codibgeuf", nome, MatchMode.ANYWHERE));
    }

    return c.list();		
}

Ou também dê uma olhada no findByExample.

alciara

Obrigada Garcia pela dica =)

vou fazer assim por enquanto

Criado 6 de maio de 2010
Ultima resposta 7 de mai. de 2010
Respostas 4
Participantes 3