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 
é 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… 
Grande abraço!!!