[RESOLVIDO] Prefixo em todas as URI's do sistema com VRaptor

Boa tarde galera!

Estou passando pela seguinte situação: preciso marcar todas as URI’s do sistema no qual estou trabalhando com uma indicação do idioma atual do mesmo (tal como, www.exemplo.com/en ou www.exemplo.com/en/contato).

Pelo que aprendi até agora, o VRaptor (v. 3.3.1), é que preciso definir tala padrão de ‘paths’ para que ele não dê erro 404. Então o que fiz foi alterar os ‘paths’ para o novo padrão e tratar o caso de 404 para redirecionar para o padrão correto.

Contudo, dessa forma, acabei tendo que poluir muito meus Resources (mesmo colocando só no @Path das classes, não é uma solução que me agrada).

Será que alguém teria uma sugestão para incluir esse prefixo em todas as URI’s sem fazer dessa forma braçal ?

Pensei que poderia fazer algo com o RoutesConfiguration ou com o StereotypeHandler, mas até onde vi não resolveria o meu problema (a não ser que seja garantido que minha implementação do StereotypeHandler sobreescreva a do VRaptor e eu consiga alterar as Routes facilmente).

Desde já agradeço a todos.

Grande Abraço!!!

Você pode deixar seus URLs como eram antes SEM o idioma, e sobrescrever as rotas do VRaptor para deixar o idioma implicito na URL. Ou seja, você configura as rotas normais e o VRaptor faz uma espécie de “concatena idiona + rota normal”.

tem essa solução:

aqui está como implementação de tenants, mas vc pode trocar o tenant por idiomas

Valeu pela resposta galera!

Atenção é uma coisa que sempre foge quando estamos muito tempo olhando para um problema sem conseguir solucioná-lo… hehehe

Cheguei a pensar em algo desse tipo (embora não tivesse fechado a idéia), mas não sabia se funcionaria, por não saber se o VRaptor iria usar minha implementação ou não. Logo, abandonei a idéia e tentei de outro lado.

Agora que vocês falaram, e tendo relido o texto da documentação do VRaptor, eis que vejo escrito:

:oops: … hehehe

Então, Lucas, não entendi direito a necessidade de disponibilizar no request o nome do tenant para poder recuperá-lo mais adiante e montar o prefixo da URL… poderia me dar uma luz nessa questão?!

Obrigado!

no seu caso vc colocaria a língua no request…

eu preciso recuperá-lo depois por causa dos redirects

senão o redirect não seria para /en/minhaLogica, seria só pra /minhaLogica.

Entendi… estava debugando aqui para ver se entendia a ordem de execução das chamadas…

O que acontece é que nesse caso, internamente, as urls válidas continuam sendo as definidas no @Path, e não as com o idioma (no meu caso)… ou será que entendi errado?

Acontece que no meu caso, as URL’s antigas também devem continuar valendo (de certa forma), mas fariam o redirect para essa com o idioma…

Nesse caso, tanto “/en/minhaLogica” como “/minhaLogica” valeriam para acessar o mesmo recurso…

E mais, se eu estiver em “/en/minhaLogica” e mudar na mão para “/br/minhaLogica”, deve continuar valendo e alterar o idioma corrente…

a idéia é não colocar no @Path() o /en ou /pt, e as lógicas só seriam acessíveis por /en/logica ou /pt/logica

mas vc pode modificar o routes parser pra fazer de outro jeito tb

Ops… acabei passando a informação pela metade…

Na verdade, ambos responderão pelo mesmo recurso, contudo caso o usuário digite “/minhaLogica”, deverá ser redirecionado para “/langPrefix/minhaLogica”…

Por isso optei por fazer o tratamento no 404 lançado quando o padrão sem idioma é passado…

Não tem uma forma de “forçar” esse 404 sem precisar mexer em todos os @Path()… ou será que ainda não compreendi a solução proposta?! Alguma alternativa melhor?

bom, pra fazer os redirects, vc pode usar um filtro, não precisa forçar o 404…

cria um filtro pra que se a url não começar com /en ou /pt ele redireciona para /en/url

Fala Lucas!

Implementei aqui a solução proposta, mas ainda não consegui fechar…

O problema é que, de alguma forma que ainda não descobri como, ele está incluindo o idioma no caminho para o JSP…

Tipo, se tento acessar a home, pela action index, ele tenta achar o JSP no caminho:

“/WebContent/br/WEB-INF/jsp/index/index.jsp”

Alguma idéia do porquê?!

vc sobrescreveu o path resolver? ou algum outro componente além do routes parser?

Não… só o routes parser, além de criar o filtro…

Interessante é que quando não faço:

ele não dá esse problema…

No debug, vejo ele passar pelo

do método ‘defaultView()’ do DefaultPageResult e retornar o path a partir do “WEB-INF”…

Parece que em algum momento ele está concatenando o contextPath ao idioma, e então ao “to” do código acima…

ah tá, é que vc tá filtrando tudo, até os jsps :wink:

é só não fazer isso qdo terminar em .jsp

É… eu percebi depois de um tempo… e não só os JSPs, como também os JSs, IMG’s e CSS’s… hehehe

Já tratei tais casos e agora tá tudo funcionando por aqui…

Muito obrigado mesmo Lucas, e até a próxima… :wink:

Grande abraço!!!