做介绍的英文网站,网站利用微信拉取用户做登录页,网站建设技术外文文献,网站建设济南adf时间作用域介绍 当我们需要在任务流消失之前做一些最终工作#xff08;干净的资源#xff0c;紧密的连接等#xff09;时#xff0c;这是使用任务流终结器的非常普遍的建议做法。 和往常一样#xff0c;我们使用在任务流中声明的托管bean。 托管Bean可以具有不同的范围… adf时间作用域 介绍 当我们需要在任务流消失之前做一些最终工作干净的资源紧密的连接等时这是使用任务流终结器的非常普遍的建议做法。 和往常一样我们使用在任务流中声明的托管bean。 托管Bean可以具有不同的范围-请求页面流视图支持Bean等。范围取决于该Bean实际用于什么。 当我们访问终结器中的backingBean范围托管的bean时存在一个小问题。 让我们看看下面的示例。 我们有一个包含页面片段的有限任务流 而且我们在三个不同范围的任务流中对bean进行了管理-页面流视图和backingBean managed-bean id__3managed-bean-name id__5FlowBean/managed-bean-namemanaged-bean-class id__4view.BackBean/managed-bean-classmanaged-bean-scope id__2pageFlow/managed-bean-scope/managed-beanmanaged-bean id__9managed-bean-name id__6ViewBean/managed-bean-namemanaged-bean-class id__7view.BackBean/managed-bean-classmanaged-bean-scope id__8view/managed-bean-scope/managed-beanmanaged-bean id__10managed-bean-name id__11BackBean/managed-bean-namemanaged-bean-class id__12view.BackBean/managed-bean-classmanaged-bean-scope id__13backingBean/managed-bean-scope/managed-bean 在页面上我们有三个按钮绑定到每个范围的托管bean af:commandButton textcommandButton 1 idcb1actiongo binding#{backingBeanScope.BackBean.button}/af:commandButtonaf:commandButton textcommandButton 1 idcb2 binding#{viewScope.ViewBean.button}/af:commandButton textcommandButton 1 idcb3 binding#{pageFlowScope.FlowBean.button}/ Bean类具有button属性和testString属性用于指示是否分配了按钮 private RichCommandButton button;public void setButton(RichCommandButton button){this.button button;}public RichCommandButton getButton(){return button;}public String getTestString(){if (this.button null)return The button is not assigned;elsereturn The button is assigned;} 当我们按下cb1时我们进入return活动并且终结器被执行 public static String resolveExpression(String expression){FacesContext fc FacesContext.getCurrentInstance();return (String) fc.getApplication().evaluateExpressionGet(fc, expression,String.class);}public void theFinalizer()
{//Just to have test access to the managed beans//and to be sure we work with the same instancesSystem.out.println(resolveExpression(#{pageFlowScope.FlowBean.testString}) resolveExpression(#{pageFlowScope.FlowBean.button}));System.out.println(resolveExpression(#{viewScope.ViewBean.testString}) resolveExpression(#{viewScope.ViewBean.button}));System.out.println(resolveExpression(#{backingBeanScope.BackBean.testString}) resolveExpression(#{backingBeanScope.BackBean.button}));
} 运行该应用程序按cb1按钮然后在系统日志中查看以下内容 为按钮分配了RichCommandButton [UIXFacesBeanImplid cb3] 为按钮分配了RichCommandButton [UIXFacesBeanImplid cb2] 为按钮分配了RichCommandButton [UIXFacesBeanImplid cb1] 一切似乎都还好。 任务流程已完成在终结器中我们使用正确的托管Bean实例。 在此测试中使用Return活动正确完成了任务流。 现在让我们放弃我们的任务流程–只是离开任务流程所在的页面。 终结器也将执行并查看系统输出 为按钮分配了RichCommandButton [UIXFacesBeanImplid cb3] 为按钮分配了RichCommandButton [UIXFacesBeanImplid cb2] 未分配按钮 这意味着我们将使用backingBeanScope.BackBean的不同实例 万一任务流过多控制器在终结器中看不到正确的backingBeanScope它为空并且控制器创建BackBean的新实例。 同时pageFlowScope和viewScope工作完美。 因此在任务流中使用backingBean范围管理的bean时要特别小心尤其是在终结器中访问它们时。 但在任何情况下你可以使用所描述的同样的伎俩以前的帖子 。 而已 参考来自ADF实践博客上的JCG合作伙伴 Eugene Fedorenko 在ADF任务流终结器中支持bean作用域 。 翻译自: https://www.javacodegeeks.com/2012/05/adf-backing-bean-scope-in-task-flow.htmladf时间作用域