如何使 bean 保持活动状态以供可从过滤器和 EJB 访问的直通会话
How to keep a bean alive for the through session accessible from filter and EJB
我正在尝试将 属性 设置为过滤器中的 bean ModelBean
并在 JSF 控制器 IndexController
.
中访问此 属性
ModelBean 被注释为 @SessionScoped
,它在过滤器和控制器中使用 @Inject
。问题是创建了两个单独的实例,我无法访问我在过滤器中设置的 属性。
在整个会话期间保持 bean 活动的最佳方法是什么?或者也许有更好的方法从过滤器传递数据?
@SessionScoped
public class ModelBean{
private String deviceId;
public ModelBean() {
super();
}
public String getDeviceId() {
return deviceId;
}
public void setDeviceId(String deviceId) {
this.deviceId = deviceId;
}
}
@Provider
public class AuthRequestFilter implements Filter {
@Inject
ModelBean model;
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws
IOException, ServletException {
// the device id is set just fine
model.setDeviceId(deviceId);
filterChain.doFilter(servletRequest, servletResponse);
return;
}
}
@Named(value = "indexController")
public class IndexController {
@Inject
ModelBean model;
// the method **is* called from the xhtml
public String justAnExample() {
// this is the problem, the deviceId is null=>
return model.getDeviceId();
}
}
感谢@Kukeltje 提出查看软件包的建议。我仍然不知道为什么我使用的包 javax.faces.bean.SessionScoped
没有让 bean 保持活动状态,但是用 javax.enterprise.context.SessionScoped
替换它就可以了。现在这个bean是活跃的,可以传递数据了。
我正在尝试将 属性 设置为过滤器中的 bean ModelBean
并在 JSF 控制器 IndexController
.
ModelBean 被注释为 @SessionScoped
,它在过滤器和控制器中使用 @Inject
。问题是创建了两个单独的实例,我无法访问我在过滤器中设置的 属性。
在整个会话期间保持 bean 活动的最佳方法是什么?或者也许有更好的方法从过滤器传递数据?
@SessionScoped
public class ModelBean{
private String deviceId;
public ModelBean() {
super();
}
public String getDeviceId() {
return deviceId;
}
public void setDeviceId(String deviceId) {
this.deviceId = deviceId;
}
}
@Provider
public class AuthRequestFilter implements Filter {
@Inject
ModelBean model;
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws
IOException, ServletException {
// the device id is set just fine
model.setDeviceId(deviceId);
filterChain.doFilter(servletRequest, servletResponse);
return;
}
}
@Named(value = "indexController")
public class IndexController {
@Inject
ModelBean model;
// the method **is* called from the xhtml
public String justAnExample() {
// this is the problem, the deviceId is null=>
return model.getDeviceId();
}
}
感谢@Kukeltje 提出查看软件包的建议。我仍然不知道为什么我使用的包 javax.faces.bean.SessionScoped
没有让 bean 保持活动状态,但是用 javax.enterprise.context.SessionScoped
替换它就可以了。现在这个bean是活跃的,可以传递数据了。