Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Métodos Estáticos e o JSF. Algum problema?

Desenvolvedores.

Tem algum problema em criar métodos estáticos (utilitários, no caso) com JSF?

Ex: Tenho uma classe FacesUtil com alguns métodos:


public static void addInfoMessageFlashScope(String message) {
    FacesContext context = FacesContext.getCurrentInstance();
    context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, message, message));
                  context.getExternalContext().getFlash().setKeepMessages(true);
}

public static void redirecionarParaPagina(String pagina) {
    FacesContext facesContext = FacesContext.getCurrentInstance();

    ConfigurableNavigationHandler nav = (ConfigurableNavigationHandler) facesContext.getApplication().getNavigationHandler();

    String caminhoAcessoNegado = pagina + "?faces-r        edirect=true";

    nav.performNavigation(caminhoAcessoNegado);
}

Dúvidas:

  1. Pode acontecer de o JSF direcionar a resposta para algum outro usuário?

  2. Algum problema de sincronismo?

  3. No caso de uma variável estática, ela será compartilhada por todas as sessões? Ou seja, se o usuario x atribuir um valor, o usuário y poderá ler esse valor?

2 respostas
solução!

Variáveis estaticas são globais, ai vai dar ruim. Não use!

Mas esses metodos que vc mostrou aí parecem ok. Só tem coisas locais neles, não vai dar problema.

E o FacesContext.getCurrentInstance() devolve a instancia correta, thread local. Nao vai dar problema tbm

Oi Fernando,

o método é thread safe pois não há nenhum atributo que está sendo compartilhado entre threads (nem tem objeto).

No entanto, tente evitar o static pois é algo procedural, não é OO! Por exemplo, você não pode usar injeção de dependência com CDI com essa classe.

Abs