2014-03-24 149 views
2

我不能注射使用@Autowired服務。@Autowired JSF 2彈簧3空

AplicationContext.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:

@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)@Component取代@ManagedBean使@Autowire注入服務或 2)

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

我解決了!更換@ManagedBean(name = 「cadastroUsuarioMB」),以@Component( 「cadastroUsuarioMB」) – user3229393

+0

很高興,這有助於你。 – Prasad

0

在配置文件中AplicationContext.xml

<context:component-scan base-package="com.mypackage.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 ""; 
    } 
} 
0

如果你想使用Spring來注入你服務,所以,你必須改變上述控制器的聲明。

替換@ManagedBean(name="cadastroUsuarioMB")通過@Component("cadastroUsuarioMB")像這樣你通知Spring容器管理注入而不是JSF容器。