Olá Pessoal,
O post de hoje é um pouco diferente. O objetivo é apresentar para vocês o I4JSF API. Ué, mas que API é essa, Camilo? É uma API para JSF com o objetivo de ajudar a evitar a repetição de código para internacionalização. Sim, mas por que usar essa API? Qual o ganho?
Vamos conhecer a seguir.
Lets go…
O contexto
Antes de apresentar a API vamos entender alguns contextos que já passei e foi de onde veio a ideia de criar I4JSF API que ainda está “verde” e na sua primeira versão. Quando trabalhamos apenas com 1 projeto JSF é comum em alguns casos criar uma classe utilitária para o código de internacionalização, ou melhor, o trecho de código que trata em adicionar uma mensagem no contexto do JSF, independente se veio de um bundle ou uma String direta. Nada de errado aqui. Mas e quando na empresa que você trabalha há mais de um projeto JSF? E que em algum momento há algo em comum referente à implementação entre eles?
Por exemplo, identifiquei que em 2 projetos JSF ambos tinham uma classe para tratar de maneira mais produtiva sem perder a qualidade, com código utilitário, que era criando uma classe utilitária. Daí pensei “se existe uma API em comum, não seria melhor para os dois projetos, desde a melhoria até a manutenção desse código semelhante? Quanto os desenvolvedores gastaram para criar a classe utilitária que normalmente era um código necessário, mas que não estava associado às regras de negocio do projeto, porém era preciso escrever para facilitar o trabalho?”.
I4JSF
Assim nasceu I4JSF API, com o objetivo de evitar esse retrabalho em equipes que usam JSF e vão precisar internacionalizar aplicação e não querem fazer uma classe utilitária para cada projeto JSF. No GitHub da API você pode encontrar todas as informações de como usar, adicionar ao seu pom.xml ou fazer o download do .jar e ainda há um projeto demo I4JSFDemo, que é um JEE Project que mostra I4JSF in Action.
Claro que há muito trabalho para ser feito e adicionando API, afinal de contas ela acabou de nascer e ai temos uma oportunidade caso deseje contribuir para o desenvolvimento. Veja como:
- Faça um fork do projeto no Github;
- Implemente a melhoria;
- Envie sua mudança;
Um exemplo de uso. Veja a comparação de código usando I4JSF com o código natural do JSF:
Natural JSF
FacesContext facesContext = FacesContext.getCurrentInstance();
ResourceBundle bundle = facesContext.getApplication().getResourceBundle(facesContext, “language”);
String byndleKey = “msg.error”;
String msgBundle = bundle.getString(bundleKey);
addFacesMessage(facesContext, msgBundle);
I4JSF
new I4JSF().addTranslateContext("language", "msg.error");
FAQ
Se for preciso adicionar uma mensagem no contexto JSF via bundle, como faço?
– Simples, chame o método public void addTranslateContext(String bundleVar, String keyProperties) e passe o nome da variável bundle declarada e a key do bundle e a API se encarrega do resto.
Quero adicionar uma mensagem via bundle para um componente específico, posso?
– Sim. Chame o método addTranslateContext() passando o componentId,variavelBundle e key do bundle
Preciso adicionar uma mensagem para um component, informar a serverity e a mensagem direta. É possível?
– Sim, chame addMessageFaceContext(componentid,serverity, message)
Preciso adicionar apenas uma mensagem ao contexto, como fazer?
Chame addFacesMessages() passando o FacesContext e a mensagem que deseja
Como adicionar uma mensagem para um severity específico sem especificar o component Id?
Chamando addMessageFaceContext(severity,message).
GitHub
https://github.com/camilolopes/I4JSF-API
Example Project
https://github.com/camilolopes/I4JSFDEMO
Vou ficando por aqui e aguardo os forks de vocês
Abraços, see ya!!!