4

在 ADF 融合 Web 应用程序的 sessionScoped 托管 bean(在有界任务流和 adfc-config.xml 文件中注册的托管 bean)中,我将会话中的属性设置为

FacesContext fctx = FacesContext.getCurrentInstance();
ExternalContext ectx = fctx.getExternalContext();
HttpSession userSession = (HttpSession) ectx.getSession(false);
userSession.setAttribute("compID", defaultCompany);

session 属性在 bean 中工作正常,并且该值显示在有界任务流的 jsff 页面中以及包含有界任务流作为区域的 jsf 页面上

我使用表达式在页面上获取会话属性值

"#{sessionScope.compID}" 

在输出文本值属性内,但无法获取包含业务组件的模型项目中的值。我想在查询中使用 compID 会话属性值

Select.........where COMP_ID ='compID';

通过在绑定变量值属性中设置值并在 where 子句中传递新创建的投标变量,但它不起作用

那么我如何在业务组件视图对象的查询的where子句中使用这个动态会话属性值呢?

4

3 回答 3

4

您可以尝试执行以下博客中提到的操作

http://andrejusb.blogspot.com/2012/01/how-to-access-session-scope-in​​-adf-bc.html

于 2013-03-07T11:56:57.817 回答
3

您需要在您的 VO 或 AM 上提供一个接受参数的服务方法 - 您在 JSF 页面中调用此方法并将会话范围作为参数传递。一个例子: https ://blogs.oracle.com/shay/entry/passing_parameters_to_an_adf_p 或 https://blogs.oracle.com/shay/entry/am_service_method_-_simple_dem

于 2013-03-07T01:07:54.117 回答
1

我的...最终解决方案使用两个答案中的代码行...

protected void prepareSession(Session session) {
Map sessionScope = ADFContext.getCurrent().getSessionScope();
String company = (String)sessionScope.get("compId");
System.out.println("Default Comapny in BC is: " + company);
super.prepareSession(session);
this.getSession().getUserData().put("Company", company);
System.out.println("After setting value in userData map of BC");
}

视图 xml 上使用的表达式

adf.userSession.userData.Company

![used expression in the bind variable value][1]
于 2013-03-08T11:48:34.073 回答