我想动态加载数据集相应的用户会话属性,我注入并将其设置为namedQuery中的参数。根据会话属性动态加载数据
namedQuery工作正常,但我没有得到所需的数据集。
我的意思是,当会话属性为9882时,加载的dataSet对应于findAll查询。但是,与此同时,如果另一个用户登录应用程序,并且他的会话属性为4207,那么dataSet仍然与9882相同,这意味着dataSet仍然对应于findAll查询;反之亦然:如果第一个会话属性为4207,则按预期使用findByPrefDep查询,但对于在该4207用户之后记录的9882会话属性,dataSet仍然相同。
@Inject
private String SessionPrefDep;
public Collection<T> getItems() {
if (items == null) {
if (Integer.valueOf(SessionPrefDep) == 4207) {
items = this.ejbFacade.findByPrefDep();
} else if (Integer.valueOf(SessionPrefDep) == 9882) {
items = this.ejbFacade.findAll();
}
}
return items;
}
有谁知道我该如何达到理想的控制?
在此先感谢。
-----------新节
生产者:
@ApplicationScoped
public class BeanCDI {
private final String sessionPrefDep = (String) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("xPrefDep");
@Produces
public String SessionPrefDep() {
return sessionPrefDep;
}
}
控制器:
@Inject
private Instance<String> SessionPrefDep;
public Collection<T> getItems() {
int sessionId = Integer.valueOf(SessionPrefDep.get());
if ((items == null) && (sessionId == 4207)) {
items = this.ejbFacade.findByPrefDep();
System.out.print("****************** findByPrefDep() - sessionId:" + sessionId);
} else if ((items == null) && (sessionId == 9882)) {
items = this.ejbFacade.findAll();
System.out.print("****************** findAll() - sessionId:" + sessionId);
}
return items;
}
嗨Petr Mensik!我非常感谢你的帮助。非常感谢你分享你的知识! – jMarcel 2014-10-08 12:28:38
欢迎您!它有帮助吗? – 2014-10-08 12:31:02
Petr Mensik,我已经测试过,但不幸的是,它没有工作。会话ID继续与登录该应用程序的第一个用户相同。它仍然是Glassfish的记忆。我已经更新了代码来显示Producer和注入的参数,就像你告诉我的一样。请看看我是否犯了一个错误。谢谢! – jMarcel 2014-10-09 18:21:55