Dúvidas pontuais no Tutorial do vRaptor3

a msg é internacionalizada por padrão… já a category e os parâmetros vc tem q internacionalizar na mão com o método i18n

Então revisando:
Nos arquivos ‘[color=darkblue]messages_en_US.properties[/color]’ e ‘[color=darkblue]messages_en.properties[/color]’ tenho

Form Produtos

produto_nome=Name
produto.preco=Price

Na Controller:

			that(!(produto.getNome().isEmpty() ), "", "required_field", i18n("produto_nome") );
			that(produto.getPreco() == null || produto.getPreco() > 0, "", "smaller_than", i18n("produto.preco"), "0");

Na JSP exibe:

  • Nome é um Campo Obrigatório.

  • Preço menor que 0!


  • Name

    <input type=“text” name=“produto.nome” value="" />

    Price<input type=“text” name=“produto.preco” value="-10.0" />

    Percebe então q algumas coisas são internacionalizadas, mas outras, não! :cry:

    o problema é que o do VRaptor tá usando o Locale Pt, e o fmt tá usando locale en…

    onde vc tá setando o locale?

    Estou ajustando direto na configuração (‘Opções’ (de Internet) em ‘Idiomas’) do Browser.
    Há 1 forma + [color=green]prática[/color] de fazer isso??!

    dá pra vc colocar links na sua página pra mudar a língua… e vc muda no HttpSession.setLocale se eu não me engano…

    Lucas, eu testei colocando links para a mesma URI concatenada a ‘?lingua=de’ e ‘?lingua=en’ (conforme explicado em http://blog.caelum.com.br/?s=mydvds - item 5) e em ‘form.jsp’ adicionando:

    <c:if test="${not empty param.lingua}"> <fmt:setLocale value="${param.lingua}" scope="session"/> </c:if> e (na verdade, eu já estava suspeitando) infelizmente persistiu o mesmo resultado.
    Então decidi (colocar o código acima como comentário JSP e) implementar “O LogOn de Aluno” q v6 orientam no Artigo da Revista [color=darkblue]MundoJava[/color] Ed.38 na Seção ‘Trabalhando com objetos na sessão’. E na ‘LoginController’ implementei o método:

    public void mudarIdioma(final String lingua) { this.sessaoDoUsuario.mudarLocale(lingua); result.redirectTo(ProdutosController.class).form(); } Só q, em vez de implementar a Classe @SessionScoped ‘UsuarioLogado’ (ou ‘AlunoLogado’ q seja), implementei a Classe:

    [code]
    @Component @SessionScoped
    public class SessaoDoUsuario {
    private HttpSession session;

    public SessaoDoUsuario(HttpSession session) {
    	this.session = session;
    }
    
    public void mudarLocale(String strLocale) {
          Locale locale = new Locale(strLocale); // language, country, variant
          Config.set(session, Config.FMT_LOCALE, locale);
          Config.set(session, Config.FMT_FALLBACK_LOCALE, locale); // request.getSession()
    }
    

    }
    [/code] para implementar uma abordagem similar a para Java[color=red]Servlet[/color] e novamente só os <fmt:message’s foram internacionalizados, mas TUDO da Validação teima em ficar sempre em Português. (Cheguei até a romever todos Idiomas do FF.)
    Será q o HamCrest tem alguma coisa a ver c/ isso??!

    o Validations do vraptor não tá levando em conta o locale =/ (e nem tem mto como fazer isso genericamente, pq vc dá um new nele)

    em todo caso, vc pode fazer (fica um pouco feio, massss):

    validator.checking(new Validations(ResourceBundle.getBundle("messages", locale)) {{
        //suas validações
    }});

    Mas, como é q eu faço para passar o (parametro) ‘locale’ para a minha ‘ProdutosController’??! :roll:
    (A propósito, como faço p/ recuperar um Atributo(q está na Session) de dentro de 1 método da minha Controller??! :shock: )

    vc pode receber um Localization no construtor, que tem um método getLocale()…

    teoricamente ele pega o locale que está na request/session/context, nessa ordem

    qto a atributos da session, se vc usou session.setAttribute na mão, vc só consegue recuperar no vraptor via session.getAttribute (recebendo o HttpSession no construtor)

    se vc usou um componente SessionScoped, basta recebê-lo no construtor

    Agora na pág. apresenta:

    [code]
    exception

    br.com.caelum.vraptor.InterceptionException: an exception was raised while executing resource method

    [/code] Tenho certeza quase total q é quando o método getLocale() de localization é chamado.
    Será qual o problema??!

    o que aparece na stacktrace do servidor?

    [quote=Lucas Cavalcanti]o Validations do vraptor não tá levando em conta o locale =/ (e nem tem mto como fazer isso genericamente, pq vc dá um new nele)

    em todo caso, vc pode fazer (fica um pouco feio, massss):

    validator.checking(new Validations(ResourceBundle.getBundle("messages", locale)) {{ //suas validações }}); [/quote]

    Já temos planos de usar o Bean Validation? Pergunto porque estou mexendo com isso, e posso fazer isso se vocês ainda não fizeram, já que ví ter uma issue para isso.

    a gente aceita contribuições com prazer, garcia =)
    não começamos a fazer ainda…

    []'s

    [quote=Lucas Cavalcanti]isso só acontece no IE? não faz mto sentido…
    [/quote]Oi, Lucas. Realmente este prob. estava acontecendo especificamente em meu Projeto. :oops: Estão decidi refazer ele do 0 (p/ isso o delay no feedBack): mas, agora rodando no TomCat 6.0 mesmo e agora tudo está funfando Ok em ambos os browsers! :wink:

    [quote=Lucas Cavalcanti]
    o que aparece na stacktrace do servidor?[/quote] E o prob. do ‘Localization’ (perdão, mas) realmente foi 1 lapso meu no código-fonte. :x

    Então para me redimir, vai 1 dika :idea: aí para o pessoALL sobre:

    Q tal criar a @SessionScoped SessaoDoUsuario totalmente desatrelada à ‘HttpSession’, desta forma:[code]
    @Component @SessionScoped
    public class SessaoDoUsuario {

    private Usuario usuarioLogado; //  = new Usuario()
    
    public void efetuarLoginDo(Usuario usuario) {
    	this.setUsuarioLogado(usuario);
    }
    
    public Usuario getUsuarioLogado() {
    	return usuarioLogado;
    }
    

    }
    [/code]Daí é só mostrar o ‘usuarioLogado’ na sua página (ou no seu Include) c/ a EL ${sessaoDoUsuario.usuarioLogado.nome} !! 8)

    na época que escrevemos o artigo pra MundoJava, esse uso da EL não era possível ainda… na apostila do VRaptor e na documentação a gente usa esse novo jeito já :wink:

    Obrigado =)

    Oi, Lucas (eu dNovo hehehe!)

    Infelizmente o Erro do (gif.jsp) no EI voltou a acontecer. :frowning:
    Mas, eu descobri o q está causando o problema: foi bem na hora q eu substituí o (.JAR) ‘vraptor-3.1.1.jar’ pelo o (nightly build) ‘vraptor-3.1.2-20100310.010227-4.jar’.
    Enquanto eu mantive o .JAR VRaptor original (do Projeto Blank) o IE funfou normal; e dpois da atualização voltou a issue de ter q dar Refresh em todo Submit.
    Poderia tentar reproduzir a falha??!
    Vlws…

    não tenho windows instalado na minha máquina… logo não dá pra eu testar no IE… qual versão vc tá usando?
    IE6? IE7? IE8?

    No IE(ca)7. (hihihi!)

    implemente essa classe… deve resolver seu problema:

    @Component
    public class FixedAcceptHeaderToFormat implements AcceptHeaderToFormat {
       public String getFormat(String acceptHeader) {
            return "html";
       }
    }

    me diga se funcionou =)