MouseOver Studio

MouseOver Studio header image 2

Templates seguros em Java com Liquid4j

September 23rd, 2008 por Diego Carrion · 4 comentários

O que é Liquid?

Como diz o próprio site, Liquid é uma livraria para renderizar templates seguros que não possam afetar a seguridade do servidor no qual a operação esta sendo realizada.

Ah?

Imaginemos que temos uma aplicação na qual nossos usuários podem criar templates personalizados com dados que disponibilizamos a partir do nosso controller. Por exemplo, no nosso controller carregamos os produtos que certo usuário tem para vender e ele pode criar uma pagina do jeito que ele quiser com dados sobre esses produtos. Para isso ele teria que ter controle sobre uma variável que referenciasse aqueles produtos, de modo que possa pegar os atributos ou ate chamar alguns métodos, como por exemplo product.name() ou product.calculate_price() . Ate ai tudo bem, mas que aconteceria se o produto tivesse um método chamado destroy, sale_to ou qualquer outro que pudesse ter algum impacto no negocio? Vamos deixar o usuário poder chamar essas operações? Claro que não!

Como Liquid soluciona o problema?

Liquid trabalha com um hash de valores que são obtidos a traves do método to_liquid do objeto com o qual se esta trabalhado. Se o usuário tiver a disposição uma lista de produtos e ele solicitar o atributo xpto de um deles, Liquid ira chamar o método to_liquid do produto e do hash que devera voltar como resultado ele ira pegar o atributo xpto. Se chamarmos produto.cor, Liquid ira chamar produto.to_liquid[”cor”]. Como Liquid trabalha com hashes, o cliente não consegue executar operações, somente solicitar dados!

Liquid em ação

Ryan Bates criou um tempo atras um screencast onde fala um pouco sobre Liquid e demostra como é utilizado.

Onde entra Liquid4j na historia?

Liquid4j permite utilizar todo o poder do Liquid na plataforma Java sem a necessidade de escrever uma linha de código Ruby. Isso quer dizer que se com Liquid utilizávamos a sintaxe:

result = Liquid::Template.parse("hi {{name}}").render("name" => "Diego")

com Liquid4j podemos utilizar:

String result = Liquid4j.parse("hi {{name}}").render(map);

onde map referencia uma variável que implementa a interface Map, por exemplo:

Map map = new HashMap();
map.put("name", "Diego");

Para conseguir tal objetivo Liquid4j utiliza JRuby por debaixo dos panos como interpretador da API do Liquid.

Onde aprender mais?

Existe uma boa documentação sobre o Liquid no wiki do projeto. Na seção Liquid para desenhadores existem um monte de exemplos sobre como utilizar Liquid nas views, exemplos que também são válidos para Liquid4j.

Onde se encontra o projeto?

As fontes do projeto estão aqui, no GitHub. Ainda não existe uma documentação la mas já ta vindo. Na pasta dist se encontra um arquivo jar funcional e na pasta lib as dependências do projeto.

Tags: java · jruby · liquid · liquid4j · templates

4 respostas ate agora ↓

  • 1 Leandro // Sep 24, 2008 at 10:52 am

    Aê Diego, sempre sacando uma cartinha da manga do JRuby, hein?

    Parabéns, cara, mais uma vez, uma ótima idéia e iniciativa.

  • 2 Diego Carrion // Sep 24, 2008 at 11:39 am

    Hahaha pior que é mesmo :P

    Obrigado Leandro, tomara que o projeto fique crescendo.

  • 3 Traduz teus objetos entre Ruby e Java com Rhyme // Sep 29, 2008 at 1:16 am

    […] RSS ← Templates seguros em Java com Liquid4j […]

  • 4 wss // Oct 18, 2011 at 6:28 pm

    preciso de um material sobre Templates JAva, alguem poderia me ajudar, desde a historinha coisa basica, e como criar ultilizar. e afins..Obrigado Contato

    bass-man_w@msn.com

    Obrigado

Deixar um comentário