JSF 2.0: Como recuperar o objeto/método de uma requisição em um PhaseListener

4 respostas
vinicius.me

Boa noite,
Eu tenho o seguinte Managed Bean:

@Named
@SessionScoped
public class ProdutoMB implements Serializable {
    //pages
    public String pageProduto() {
        produto = new Produto();
        return "/cadastro/produto/Produto";
    }
} //fim da classe

Em uma página existe uma EL que acessa esse Managed Bean, levando o usuário para a página de destino, no caso /cadastro/produto/Produto.
Gostaria de saber, como eu consigo recuperar o Managed Bean (ProdutoMB), na verdade o objeto, em um PhaseListener, no caso no método afterPhase(PhaseEvent event).
Segue abaixo o PhaseListner.

@Override
    public void afterPhase(PhaseEvent event) {
        FacesContext facesContext = event.getFacesContext();
        String currentPage = facesContext.getViewRoot().getViewId();
    }

Obrigado, Vinicius.

4 Respostas

vinicius.me

O que eu quero fazer na verdade é aplicar regras de segurança usando annotations.

Existe algum framework que permita isso?

Como eu faço para saber se o método que gerou a requisição pro JSF renderizar a próxima página está anotada com a minha anotação? Isso em um PhaseListner?

Não sei se fui claro o suficiente.

Obrigado,
Vinicius.

thimor

Nao sei sei vai resolver seu problema, mas quando eu preciso recuperar um managedbean eu faço assim.

FacesContext context = FacesContext.getCurrentInstance();
ProdutoBean pb = (ProdutoBean) getManagedBean(context, "produtoBean");

private Object getManagedBean(FacesContext context, String string) {
    return context.getELContext().getELResolver().getValue(context.getELContext(), null, string);
}
vinicius.me

@thimor

Opa, valeu pela ajuda…

Não é exatamente o que estou procurando mas ja deu uma esclarecida…

O que eu preciso quero fazer é algo parecido com o @Secured do Spring Security, nunca usei, não se é isso mesmo.

Obrigado,
Vinicius.

vinicius.me
thimor:
Nao sei sei vai resolver seu problema, mas quando eu preciso recuperar um managedbean eu faço assim.
FacesContext context = FacesContext.getCurrentInstance();
ProdutoBean pb = (ProdutoBean) getManagedBean(context, "produtoBean");

private Object getManagedBean(FacesContext context, String string) {
    return context.getELContext().getELResolver().getValue(context.getELContext(), null, string);
}

E se eu quisesse pegar QUALQUER ManagedBean, e nao somente o ProdutoBean, como ficaria?
return context.getELContext().getELResolver().getValue(context.getELContext(), null, string);
Irá me retornar somente o objeto relacionado ao EL que eu passar na string.

Teria como eu recuperar no PhaseListener em tempo de execução a EL? Teria uma maneira mais facil.

Alguem já criou uma annotation para JSF? Pois é isso que quero fazer, porém não estou consguindo filtrar a mesma em runtime.

Criado 24 de junho de 2010
Ultima resposta 1 de jul. de 2010
Respostas 4
Participantes 2