Olá!
Estou precisando internacionalizar meu aplicativo que usa JSF+EJB. Se eu pudesse usar arquivos .properties seria muito simples :). Porém, devido a algumas razões internas, preciso colocar as mensagens em tabelas no banco de dados.
Estou tendo dificuldades em encontrar material sobre isso, pesquisei, pesquisei mas está difícil.
Minha última tentativa foi extender ListResourceBundle e ao mesmo tempo anotar a classe como ManagedBean/ApplicationScoped. Porém, mesmo assim não consigo injetar meu EJB que faz query no banco dentro do ResourceBundle, vejam abaixo:
@ManagedBean(eager=true)
@ApplicationScoped
public class ResourceDic extends ListResourceBundle {
@EJB
private MeuDAO meuDAO;
@Override
protected Object[][] getContents() {
List<Dic> dic = atualizaDicionario();
Object[][] content = new Object[dic.size()][2];
for(int i = 0; i <= dic.size(); i++) {
content[i][0] = dic.get(i).getAtrCodigo();
content[i][1] = dic.get(i).getAtrMensagem();
}
return content;
}
private List<Dic> atualizaDicionario() {
return meuDAO.obtemDicionario(); // genericoDAO é nulo nesse ponto
}
}
Agora, se coloco a chamada do método obtemDicionario dentro de um PostConstruct, o meuDAO deixa de ser nulo e o método é chamado, porém dentro do getContents a lista volta a ser nula.
Minha suspeita é que a classe ResourceDic é criada como um ManagedBean pelo container, e uma outra instância é criada pela ferramenta de Bundle do Java, e essa segunda instância não tem acesso à injeções…
Enfim, estou tateando ainda esse problema, se alguém souber de uma maneira melhor ou um outro caminho para atingir esse objetivo não hesite em falar.
Grande abraço!