![](/img/trans.png)
[英]@Autowired bean null into JSF ManagedBean, with Spring xml configuration
[英]@Autowired JSF 2 Spring 3 Null
我無法使用@Autowired注入服務。
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 "";
}
}
該錯誤是因為UsuarioService是spring上下文管理的bean,而@ManagedBean是jsf管理的bean。 1)用@Component替換@ManagedBean以使@Autowire注入服務,或2)
@ManagedProperty(value="#{usuarioService}")
private UsuarioService usuarioService ; // mutators for this.
}
在您的配置文件AplicationContext.xml中
<context:component-scan base-package="com.mypackage.bean" />
需要在您的Bean上添加注釋“ @Controller ”
@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 "";
}
}
如果要使用Spring注入服務 ,則必須在控制器的上面更改聲明。
像這樣用@Component("cadastroUsuarioMB")
替換@ManagedBean(name="cadastroUsuarioMB")
,您可以通知Spring容器管理注入而不是JSF容器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.