我想動態加載數據集相應的用戶會話屬性,我注入並將其設置爲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