Ing*_*her 5 java servlets java-ee jsf-2
在我的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结合存在一些问题,但我们时间不长)?
@ManagedProperty在servlet中使用是不可能的,因为这@ManagedBean仅适用于类.此外,注入一个范围小于父本身的对象也是不可能的,因为这也只会导致并发问题.注入器会为此抛出一个runtimeexception.servlet本质上是应用程序范围并在所有用户之间共享,并且您的UserIdentitybean似乎是会话作用域.
由于JSF在Servlet API之上运行并将会话范围的bean存储在会话中,因此您可以在servlet中将其作为会话属性获取:
UserIdentity identity = (UserIdentity) request.getSession().getAttribute("userIdentity");
Run Code Online (Sandbox Code Playgroud)
请注意,FacesContext除了之外的servlet通常也不可用FacesServlet,因此FacesContext在注释中建议的servlet中使用没有任何意义,只会返回null.
| 归档时间: |
|
| 查看次数: |
5264 次 |
| 最近记录: |