2011-05-23 29 views
6

Estoy usando jsf 2.0 y tengo dos Bean Navigation (Application Scope) y Module (Request Scope). Quiero usar métodos de Bean de navegación en Module Bean. Estoy haciendo de esta manera En el Módulo frijolJSF 2.0 Acceso al bean Scope Application desde otro Bean

@ManagedProperty(value = "#{navigationBean}") 
    private NavigationBean navigationBean; 

Pero cuando estoy tratando de conseguir navigationBean.SomeMethod no está funcionando como frijol de navegación es nulo. ¿Como hacer esto?

Respuesta

19

El café en grano tiene que ser un fullworthy @ManagedBean. El aceptador debe tener un método de establecimiento público para el frijol inyectado. El bean inyectado solo está disponible en @PostConstruct y más allá (es decir, en todos los métodos de eventos normales, pero por lo tanto no en en el constructor del aceptador).

lo tanto, esto se debe trabajar;

@ManagedBean 
@ApplicationScoped 
public class Navigation { 
    // ... 
} 

@ManagedBean 
@RequestScoped 
public class Module { 

    @ManagedProperty(value="#{navigation}") 
    private Navigation navigation; 

    @PostConstruct 
    public void init() { 
     navigation.doSomething(); 
    } 

    public void setNavigation(Navigation navigation) { 
     this.navigation = navigation; 
    } 

} 
4

Creo que @ManagedProperty requiere un método público para funcionar.

1

Me dio la solución

tengo un método de firma de la aplicación getReadAccess booleano (papel de cuerdas, módulo de cadena). Si quiero usar en otro bean entonces tengo que seguir estos pasos

`javax.el.MethodExpression readAccess; 
    javax.el.ELContext elContext = null; 
    javax.faces.context.FacesContext context = FacesContext.getCurrentInstance(); 
    elContext = ((FacesContext) context).getELContext(); 
    javax.faces.application.Application application = FacesContext.getCurrentInstance().getApplication(); 
    javax.el.ExpressionFactory expressionFactory = application.getExpressionFactory(); 
    readAccess = expressionFactory.createMethodExpression(elContext, 
      "#{navigationBean.getReadAccess}", Void.class, new Class[] { 
        String.class, String.class }); 

    //--------Call---------------------------- 
    return (Boolean) readAccess.invoke(elContext, new Object[] { 
       "roleName", "moduleName" }); 

`

+3

Eso no es una solución. Eso es una solución/pirateo. – BalusC

Cuestiones relacionadas