Tentei até usar a solução do Livro de Receitas do site: Aceitando URLs com ou sem barra no final
Mas não funcionou!!!
G
garcia-jj
Se o parametro é opcional não faz sentido algum você passar via “nice urls”. Esse recurso é ideal para você deixar a url mais botinha e principalmente quando você digita direto o url, e não para envio de formulário.
mas é isso q estou fazendo, to chamando direto na url…
veja o meu código:
<%@taglibprefix="c"uri="http://java.sun.com/jsp/jstl/core"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><metahttp-equiv="Content-Type"content="text/html; charset=UTF-8"><title>Localidades</title><linkhref="<c:url value="/css/estilo.css"/>" rel="stylesheet" type="text/css">
</head><bodyclass="lstBODY"><center><tableclass="lstTab"cellspacing="0"><tr><tdcolspan="4"><tableclass="lstTopoTABLE"cellspacing="0"><trclass="lstTopoTR"><tdclass="lstTopoTD">
Localidades
</td></tr><trclass="lstFiltroTR"><tdclass="lstFiltroTD"><formaction="<c:url value="/principal/localidade/lista"/>" method="get">
<inputid="page"name="page"type="hidden"value="${page}"/><inputid="order"name="order"type="hidden"value="${order}"/>
Filtrar por :
<selectid="cboFiltro"name="cboFiltro"><optionvalue="id">Id</option><optionvalue="nome">Nome</option></select><scriptlanguage="javascript">document.getElementById('cboFiltro').value="${cboFiltro}"</script><inputid="txtFiltro"name="txtFiltro"type="text"size="50"value="${txtFiltro}"/><inputtype="submit"value="Filtrar"/></form></td></tr></table></td></tr><trclass="lstTrTit"><tdclass="lstTdTit"width="10%"><aclass="lstLinkTit"href="<c:url value="/principal/localidade/lista/id/${page}/${cboFiltro}/${txtFiltro}"/>">ID</a></td><tdclass="lstTdTit"width="60%"><aclass="lstLinkTit"href="<c:url value="/principal/localidade/lista/nome/${page}/${cboFiltro}/${txtFiltro}"/>">NOME</a></td><tdclass="lstTdTit"width="15%"><aclass="lstLinkTit"href="<c:url value="/principal/localidade/lista/cep/${page}/${cboFiltro}/${txtFiltro}"/>">CEP</a></td><tdclass="lstTdTit"width="15%"><aclass="lstLinkTit"href="<c:url value="/principal/localidade/lista/siglaUf.sigla/${page}/${cboFiltro}/${txtFiltro}"/>">UF</a></td></tr><c:forEachitems="${localidadeList}"var="loc"><trclass="lstTrReg"onMouseOver="this.className='lstTrRegMouse'"onMouseOut="this.className='lstTrReg'"><tdclass="lstTdReg">${loc.id}</td><tdclass="lstTdReg">${loc.nome}</td><tdclass="lstTdReg">${loc.cep}</td><tdclass="lstTdReg">${loc.siglaUf.descricao}</td></tr></c:forEach><trclass="lstTrPag"><tdclass="lstTdPag"colspan="4"><c:iftest="${pageFirst != null}"><aclass="lstLinkPag"href="<c:url value="/principal/localidade/lista/${order}/${pageFirst}/${cboFiltro}/${txtFiltro}"/>">Primeira</a> </c:if><c:iftest="${pagePrev != null}"><aclass="lstLinkPag"href="<c:url value="/principal/localidade/lista/${order}/${pagePrev}/${cboFiltro}/${txtFiltro}"/>">Anterior</a> </c:if>
Página ${page} de ${pageCount}
<c:iftest="${pageNext != null}"> <aclass="lstLinkPag"href="<c:url value="/principal/localidade/lista/${order}/${pageNext}/${cboFiltro}/${txtFiltro}"/>">Próxima</a></c:if><c:iftest="${pageLast != null}"> <aclass="lstLinkPag"href="<c:url value="/principal/localidade/lista/${order}/${pageLast}/${cboFiltro}/${txtFiltro}"/>">Última</a></c:if></td></tr></table></center></body></html>
e o Resource:
/* * To change this template, choose Tools | Templates * and open the template in the editor. */packagebr.com.caelum.vraptor.logicas.principal;importbr.com.caelum.vraptor.Get;importbr.com.caelum.vraptor.Path;importbr.com.caelum.vraptor.Resource;importbr.com.caelum.vraptor.Result;importbr.com.caelum.vraptor.interceptadores.Liberado;importbr.com.caelum.vraptor.hibernate.DaoGenerico;importbr.com.caelum.vraptor.util.ConversorReflection;importbr.com.caelum.vraptor.util.PaginaUtil;importbr.com.hibernate.Consulta;importbr.com.hibernate.pojos.principal.Localidade;importjava.util.List;/** * * @author Lauro */@Resource@Path("/principal/localidade")publicclassLocalidadeController{privateDaoGenericodao;privateResultresult;publicLocalidadeController(DaoGenericodao,Resultresult){this.dao=dao;this.result=result;}@Get@Liberado@Path({"lista","lista/{order}/{page}/{cboFiltro}/{txtFiltro}"})publicvoidlista(Stringorder,Integerpage,StringcboFiltro,StringtxtFiltro){page=page!=null?page:1;order=order!=null?order:"nome";cboFiltro=cboFiltro!=null?cboFiltro:"";txtFiltro=txtFiltro!=null?txtFiltro:"";System.out.println("txt "+txtFiltro);Consultaconsulta=newConsulta(dao.getSession(),Localidade.class);consulta.setPagina(page,Consulta.TAMANHO_PAGINA);consulta.addOrdemAsc(order);if(!cboFiltro.isEmpty()&&!txtFiltro.isEmpty()){Objectobj=ConversorReflection.converte(Localidade.class,cboFiltro,txtFiltro);if(obj!=null){consulta.addCriterio(cboFiltro,obj);}}PaginaUtil.include(result,consulta.getQtdeRegistros(),page,Consulta.TAMANHO_PAGINA);List<Localidade>lista=consulta.getLista();result.include("order",order);result.include("cboFiltro",cboFiltro);result.include("txtFiltro",txtFiltro);result.include("localidadeList",lista);}}
Quando chamo direto pela url e os parametros de filtro estão vazios dá erro 404. Quando não, passa tranquilo.
L
Lucas_Cavalcanti
se vc está esperando um parâmetro via URI e não passa nada não vai funcionar mesmo…
se vc tem @Path(“abc/{def}/{ghi}”), vc só vai poder chamar uris do tipo abc/xxx/yyyyy, abc/awerq/sdkfjasd… não funciona omitir nenhum parâmetro…
como o garcia falou, se o parâmetro é opcional, não deveria fazer parte da uri
L
lauronolasco
ok…
entao eu terei de motar a uri com:
???
outra coisinha… acho que um erro primário meu:
se eu chamo uma uri direto assim: recurso/metodo/vitó
quando eu recebo o parametro ele vem assim: vit%63%61 (nao lembro exatamente os numeros…)
como resolvo isso???
G
garcia-jj
Sim. Isso quando você tem parametros enviados via HTTP/GET. No caso do post esses valores não aparecem na URI.
outra coisinha… acho que um erro primário meu:
se eu chamo uma uri direto assim: recurso/metodo/vitó
quando eu recebo o parametro ele vem assim: vit%63%61 (nao lembro exatamente os numeros…)
como resolvo isso???
Isso não é resolvido porque não é um problema. Sempre que você faz uma requisição o navegador converte todos os parametros para ASCII antes de fazer a requisição. Isso é padronizado. %20 por exemplo é um espaço, então ao invés de na requisição você ter algo como “vraptor 3” você terá “vraptor%203”. Mas se você tentar imprimir o valor desse parametro notará que ele aparece como “vraptor 3” correto, sem aquele código ascii.
Abraços
L
lauronolasco
Perdão pessoal!!!
Agora entendi… se eu chamar: recurso/metodo/vitó
vitó, para o navegador, não é um parâmetro… faz parte da uri…
porém, se eu chamar recurso/metodo?txt=vitó
vitó agora é um parametro… e será convertido para ascii
Vou parar um pouco aqui… desde domingo to estudando vraptor e implementando um projeto…
acho que precisode uma cerveja!!! e tirar “os sonos” atrasados!!!