【问题标题】:@Autowired JSF 2 Spring 3 Null@Autowired JSF 2 弹簧 3 空
【发布时间】:2014-05-01 21:12:13
【问题描述】:

我无法使用@Autowired 注入服务。

应用上下文.xml

    <context:component-scan base-package="com.mypackage" />
<context:component-scan base-package="com.mypackage.bean" />
<context:component-scan base-package="com.mypackage.dao" />
<context:component-scan base-package="com.mypackage.service" />
<context:component-scan base-package="com.mypackage.filters" />
<context:annotation-config />

faces-config.xml

    <application>
     <el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver></application>

web.xml

    <listener>
    <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
  </listener>

  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

服务声明:

    @Service
public class UsuarioServiceImpl extends GenericServiceImpl implements UsuarioService{...}

托管豆:

@ManagedBean(name="cadastroUsuarioMB")
@SessionScoped
public class CadastroUsuarioBean {

    @Autowired
    UsuarioService usuarioService;

    private Usuario usuario = new Usuario();

    public String salvar() {
                //Error !!! usuarioService is null !
        usuarioService.retornaUsuarioPorLogin(usuario.getEmail(), usuario.getSenha());
        JsfUtil.addSuccessMessage(null, usuario.getCelular());
        return "";
   }
}

【问题讨论】:

    标签: java spring jsf-2 code-injection


    【解决方案1】:

    如果你想使用 Spring 注入你的服务,那么你必须更改控制器上面的声明。

    @ManagedBean(name="cadastroUsuarioMB") 替换为@Component("cadastroUsuarioMB") 这样您通知Spring 容器来管理注入而不是JSF 容器。

    【讨论】:

      【解决方案2】:

      在您的配置文件中AplicationContext.xml

      <context:component-scan base-package="com.mypackage.bean" />
      

      需要将注解“@Controller”放在你的Bean上

      @Controller
      @ManagedBean(name="cadastroUsuarioMB")
      @SessionScoped
      public class CadastroUsuarioBean {
      
          @Autowired
          UsuarioService usuarioService;
      
          private Usuario usuario = new Usuario();
      
          public String salvar() {
                      //Error !!! usuarioService is null !
              usuarioService.retornaUsuarioPorLogin(usuario.getEmail(), usuario.getSenha());
              JsfUtil.addSuccessMessage(null, usuario.getCelular());
              return "";
         }
      }
      

      【讨论】:

        【解决方案3】:

        该错误是因为 UsuarioService 是 spring 上下文托管 bean,而 @ManagedBean 是 jsf 托管 bean。任何一个 1)将@ManagedBean 替换为@Component 以使@Autowire 注入服务或 2)

        @ManagedProperty(value="#{usuarioService}")
        private UsuarioService usuarioService ; // mutators for this.
        }
        

        【讨论】:

        • 我解决了!将 @ManagedBean(name="cadastroUsuarioMB") 替换为 @Component("cadastroUsuarioMB")
        • 很高兴,这对您有所帮助。
        猜你喜欢
        • 1970-01-01
        • 2015-06-15
        • 1970-01-01
        • 2012-05-09
        • 1970-01-01
        • 1970-01-01
        • 2020-05-24
        • 1970-01-01
        • 2015-08-11
        相关资源
        最近更新 更多