在我的Java EE 6-webapp(运行在最新的GlassFish 3.1上)中,我正在使用JSF2-ManagedBeans并将@ManagedProperty它们注入到其他ManagedBeans中.现在我想知道我是否也可以注入@ManagedBean一个@WebServlet,使用@ManagedProperty.一些代码:
@WebServlet(name = "vdd")
public class VddServlet extends HttpServlet
{
@ManagedProperty(value = "#{userIdentity}")
private UserIdentity identity;
}
Run Code Online (Sandbox Code Playgroud)
ManagedBean看起来像这样:
@ManagedBean
public class UserIdentity
{
...
}
Run Code Online (Sandbox Code Playgroud)
这样工作吗?如果没有,我有什么其他方法将ManagedBean注入WebServlet(没有CDI,目前不是一个选项 - 因为GF 3.1 B32/33与OSGi-Java EE-apps结合存在一些问题,但我们时间不长)?
由于这个BalusC帖子,我尝试在另一个托管bean中获取托管bean的实例:这里
使用findBean方法,它很棒,我检索我的bean,但ManagedProperty我无法得到我的bean.
我要注入的bean是这个:
@ManagedBean(name="locale")
@SessionScoped
public class LocaleBean {
private String locale;
public String getLocale() {
return locale;
}
public void setLocale(String locale) {
FacesContext.getCurrentInstance().getViewRoot().setLocale(new Locale(locale));
this.locale = locale;
}
}
Run Code Online (Sandbox Code Playgroud)
所以,当我打电话给LocaleBean locale = findBean("locale");我的loginbean时,它的工作原理是:
@ManagedProperty("#{locale}") // OR localeBean, LocaleBean...
private LocaleBean locale;
Run Code Online (Sandbox Code Playgroud)
不起作用......
com.sun.faces.mgbean.ManagedBeanCreationException:Impossibledecréerlebeangéré«login».Lesproplèmessuivantsontétédétectés: - Lapropriété«locale»dubeangéré«login»n'existe pas.
告诉我为什么 ?