我有一个模板,其中包含一个按钮,可让您选择个人资料,按下按钮并显示可用的个人资料,选择一个并按下接受。之后我成功设置了变量会话。
我有一个" First"带有来自View Link的两个jsff页面片段的jsf页面。视图链接由headerView和detailView组成。 headerView有一个绑定变量。我需要的是参数(bindVariableParameter)可以由模板的会话变量设置。
这就是我得到的:
我在主页(单独的应用程序模块)中,我在加载de" First"之前按下模板按钮。 jsf页面然后我去了" First" jsf页面信息加载成功。我在应用程序模块中做的是这样的:
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");
}
在headerView的bind变量表达式中我使用:
adf.userSession.userData.Company
效果很好!!!!但!!!! 当我再次按下按钮并选择其他配置文件时,信息不会更新。在headerView中也不在headerView中。
另外,当我去" First" jsf页面(之前没有按模板按钮),我没有信息,这是对的,因为我没有任何会话变量。之后,我按下模板按钮并选择配置文件,但页面没有刷新。
我尝试了几种方法,但我迷失了。
你能帮帮我吗?
问候。
答案 0 :(得分:2)
您有两种选择:
选项一:按如下方式调整您的AM:
jbo.doconnectionpooling =真
jbo.txn.disconnect_level = 1
这将确保在每次操作之前调用prepareSession()方法。这恰好是ADF制作系统中的最佳实践,提高了可扩展性(参见here)
选项二:比使用prepareSession()更好,您可以通过自定义DataControlFactory将Http Session数据传递给ADF BC。 您可以在此处找到示例:http://andrejusb.blogspot.co.uk/2012/05/solution-for-sharing-global-user-data.html