Injecting Beans in JSF 2.0

前端 未结 2 2002
遥遥无期
遥遥无期 2020-12-16 07:00

I have a Session scoped bean

import javax.faces.bean.SessionScoped;
import javax.inject.Named;
@Named
@SessionScoped
public class SessionBean implements Seri         


        
2条回答
  •  有刺的猬
    2020-12-16 07:22

    You can't mix annotations from those two packages you're using javax.faces.bean.SessionScoped for JSF, and import javax.inject.Named for CDI. Both reflect different injection mechanisms and cannot be mixed on the same bean. You have to pick both annotations(for Injection and Bean Scoping) from the same package. Use the following sets from their corresponding packages

    For CDI-based bean definitions

    javax.enterprise.context.SessionScoped //for bean scoping
    javax.inject.Named //for bean declaration
    javax.inject.Inject //for injection
    

    For JSF-based bean definitions

    javax.faces.bean.SessionScoped //for bean scoping
    javax.faces.bean.ManagedBean //for bean declaration
    javax.faces.bean.ManagedProperty //for bean injection
    

    EDIT: Now I understand your requirements better, use the following construct to inject a JSF managed bean

     @ManagedProperty(value="#{yourBeanName}")
     SessionBean yourSessionBean;
    

    Also note that within JSF, you can inject only beans of a wider scope than their targets e.g. you can inject a @SessionScoped bean into a @RequestScoped bean and not the other way around

    But since JSF managed beans are deprecated, better to use the CDI managed ones. In that case you can inject shorter scoped beans in wider scoped ones

提交回复
热议问题