【发布时间】:2014-10-07 16:09:10
【问题描述】:
我正在尝试根据用户会话属性动态加载数据集,我将其注入并将其设置为 namedQuery 中的参数。
namedQuery 工作正常,但我没有得到想要的数据集。
我的意思是,当session属性为9882时,加载的dataSet对应的是findAll查询。但是与此同时,如果另一个用户登录应用程序-并且他的会话属性为4207-dataSet仍然与9882相同,这意味着dataSet仍然对应于findAll查询;反之亦然:如果第一个会话属性是 4207,它使用 findByPrefDep 查询,正如预期的那样,但是对于在 4207 用户之后记录的 9882 会话属性,数据集仍然相同。
@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;
}
【问题讨论】: