动态ADF火车:以编程方式添加火车停靠站

我将展示如何以编程方式“即时”将火车停靠站添加到ADF火车中。 在我的用例中,我有一些票务预订应用程序。 它具有训练模型的有限任务流。 在火车的第一站,用户输入乘客的数量,在随后的站点,他们输入一些乘客的信息。 带有乘客信息的站点数量必须根据在第一个火车站点提交的值进行动态更改。 因此,描述的行为的结果应如下所示:

有界任务流具有以下结构:

StartView活动是一个页面片段,我们在其中输入乘客人数,而DynamicView活动提供了一个页面片段来输入乘客的信息。 目前,我们只有一个活动来提供乘客的信息,如果乘客人数大于一个,我将添加其他活动。
StartView页面片段的inputNumberSpinbox提交其值设置为某些PageFlowScope支持bean的passengersNumber财产和行动的提交按钮是同一个bean的方法:

public class MainTrain {//Extra added train stopsprivate List<ActivityId> dynamicStops = new ArrayList<ActivityId>();//Value of inputNumberSpinboxprivate int passengersNumber = 1;public String buttonPress(){//The number of extra added train stops is greater than neededif (passengersNumber <= dynamicStops.size())clearExtraStops();else //The number of extra added train stops is less than needed if (passengersNumber-1 > dynamicStops.size()) addDynamicStops(); return null;}

因此,通过按Submit按钮,我们可以根据inputNumberSpinbox的值添加一些火车停靠点或清除额外的停靠 。 我们将所有添加的动态停靠点保存在dynamicStops列表中。 让我们看一下clearExtraStops()方法:

private void clearExtraStops() {for (int i = dynamicStops.size(); i >= passengersNumber; i--) {//Get ActivityId to be removedActivityId removeActivityId = dynamicStops.get(i-1);//Get current train model and remove train stopTrainModel trainModel = TrainUtils.findCurrentTrainModel();trainModel.getTrainStops().remove(removeActivityId);//Remove activity from task flow definitiongetTaskFlowDefinition().getActivities().remove(removeActivityId);dynamicStops.remove(i-1);} }

该方法删除了两件事:火车模型中的火车停靠点和任务流定义中的活动。 addDynamicStops()方法将变得更加有趣:

private void addDynamicStops() { for (int i = dynamicStops.size(); i < passengersNumber - 1; i++) {//Creating new ActivityIdActivityId activityId = new ActivityId(getTaskFlowId(), new StringBuilder("DynamicView").append(i).toString()); //The main trick of the post.//We consider DynamicView activity as a base for new train stop and new activity//Get base activity (DynamicView) and its train stopActivity baseActivity = getBaseDynamicActivity();TrainStopContainer stopContainer = (TrainStopContainer)baseActivity.getMetadataObject();TrainStop baseTrainStop = stopContainer.getTrainStop();//Create new Activity based on DynamicView but with new ActivityId ActivityImpl activityImpl = new ActivityImpl(baseActivity, activityId); //Add created activity to the task flow definitiongetTaskFlowDefinition().getActivities().put(activityId, activityImpl);//Create new train stop based on the DynamicView's train stopTrainStopModel trainStopModel = new TrainStopModel(new TrainStopImpl(baseTrainStop, i+2), activityId);//Add created train stop to the train stop modelTrainModel trainModel = TrainUtils.findCurrentTrainModel();trainModel.getTrainStops().put(activityId, trainStopModel); //Add created activity to our listdynamicStops.add(activityId); }
}private Activity getBaseDynamicActivity() {ActivityId baseActivityId = new ActivityId(getTaskFlowId(), "DynamicView"); MetadataService metadataService = MetadataService.getInstance();return metadataService.getActivity(baseActivityId); 
}private TaskFlowDefinition getTaskFlowDefinition() {MetadataService metadataService = MetadataService.getInstance();return metadataService.getTaskFlowDefinition(getTaskFlowId()); 
}private TaskFlowId getTaskFlowId() {ControllerContext controllerContext = ControllerContext.getInstance(); ViewPortContext currentViewPortCtx = controllerContext.getCurrentViewPort(); TaskFlowContext taskFlowCtx = currentViewPortCtx.getTaskFlowContext(); return taskFlowCtx.getTaskFlowId();
}

因此,本文的主要技巧是创建新的活动,并基于DynamicView的现有活动来停止站点。 为了实现这个想法,我创建了两个类: ActivityImplTrainStopImpl 。 这些类只不过是相应地实现Activity和TrainStop接口的代理类。 它们将接口实现委派给基本实例,除了一些特定的方法(例如,用于ID和DisplayName的getter)之外:

public class TrainStopImpl implements TrainStop { //Base instance private TrainStop baseTrainStop;private int mpassNo;private static final String PASSANGER_FORM = "Passenger's data: ";public TrainStopImpl(TrainStop trainStop, int passNo) {baseTrainStop = trainStop; mpassNo = passNo;}//Specific implementationpublic String getDisplayName() {return new StringBuilder(PASSANGER_FORM).append(mpassNo).toString();}public String getOutcome() {return baseTrainStop.getOutcome();}public String getSequential() {return baseTrainStop.getSequential();}...
public class ActivityImpl implements Activity {private Activity baseActivity;private ActivityId mid;public ActivityImpl(Activity activity, ActivityId id) {baseActivity = activity;mid = id;}//Specific implementationpublic ActivityId getId() {return mid;}public String getType() {return baseActivity.getType();}public Object getMetadataObject() {return baseActivity.getMetadataObject();}
...

这篇文章的另一张图片只是为了展示它的工作原理:

就这样! 您可以下载JDeveloper 11.1.1.2.0的示例应用程序 。

参考: 动态ADF列车。 通过ADF实践博客中的JCG合作伙伴 Eugene Fedorenko以编程方式添加火车停靠站 。


翻译自: https://www.javacodegeeks.com/2012/05/dynamic-adf-train-adding-train-stops.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/373062.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

修改sqlserver的数据库排序规则语句

alter database SOETMS collate Chinese_PRC_CI_AS 转载于:https://www.cnblogs.com/lxboy2009/p/5481977.html

关于存储过程权限

关于ORACLE账号的权限问题&#xff0c;一般分为两种权限&#xff1a; 系统权限: 允许用户执行特定的数据库动作&#xff0c;如创建表、创建索引、创建存储过程等 对象权限: 允许用户操纵一些特定的对象&#xff0c;如读取视图&#xff0c;可更新某些列、执行存储过程等 像这种查…

宁波镇海2021年高考成绩查询,最新!2021年,宁波镇海区的这14所中小学“爆了...

宁波镇海区教育局发布了2021年公办学校小学一年级、初中一年级招生第一次预警&#xff0c;这也是宁波首个发布2021年公办学校招生预警的县、市、区。根据最新数据摸排&#xff0c;宁波镇海区有8所小学红色预警、2所初中红色预警&#xff0c;1所小学黄色预警、3所初中黄色预警。…

用Java解决生产者-消费者问题

当我们尝试多线程编程时&#xff0c;生产者-消费者问题是最常见的问题之一。 尽管不像多线程编程中的其他一些问题那样具有挑战性&#xff0c;但是错误地实现此问题可能会造成应用程序混乱。 生产的物品将不使用&#xff0c;开始的物品将被跳过&#xff0c;消耗量取决于生产是在…

哪位科学家奠定了计算机结构理论,计算机等级考试一级理论知识选择题题库(1-50)...

领域中的问题为主的数值计算称为科学计算B)计算机应用可分为数值应用和非数值应用两类C)计算机各部件之间有两股信息流&#xff0c;即数据流和控制流D)对信息(即各种形式的数据)进行收集、储存、加工与传输等一系列活动的总称为实时控制答案&#xff1a;D32. 金卡工程是我国正在…

axios 参数为payload的解决方法

1. 添加头部headers headers: {Content-Type: application/x-www-form-urlencoded,}, axios.post(url, {a: 1, b:2}, {headers: {Content-Type: application/x-www-form-urlencoded,}, }).then(response > response.data).then(err > {console.log(err);}); 2. 在Browser…

超出了GC开销限制– Java堆分析

这篇文章是我们原来的GC超出限制的问题模式帖子的延续。 正确的Java堆分析对于消除O​​utOfMemoryError&#xff1a;GC开销问题至关重要。 如果您不熟悉此Java HotSpot 1.6错误&#xff0c;建议您首先阅读有关此主题的第一篇文章 。 本文将为您提供一个示例程序和一个教程&…

开灯问题

开灯问题 时间限制&#xff1a;3000 ms | 内存限制&#xff1a;65535 KB难度&#xff1a;1描述有n盏灯&#xff0c;编号为1~n&#xff0c;第1个人把所有灯打开&#xff0c;第2个人按下所有编号为2 的倍数的开关&#xff08;这些灯将被关掉&#xff09;&#xff0c;第3 个人按…

计算机科学基本理论,计算机科学的基础知识.ppt

计算机科学的基础知识第二章 计算机科学的基础知识 本章学习目标&#xff1a; 数据的理解、分类与表示 计算机的基本结构与工作原理 程序设计基础 算法基础 2.1 数据类型 2.2 计算机内部的数据 2.3 表示数据 2.4 十进制表示法 2.5 二进制表示法 2.6 十六进制表示法 2.7 八进制表…

损坏注册表的原因

软件: &#xff08;1&#xff09;应用程序错误 &#xff08;2&#xff09;驱动程序不兼容或使用了错误的应用程序 &#xff08;3&#xff09;应用程序在注册表中添加了错误的内容 &#xff08;4&#xff09;应用程序添加了错误的数据文件和应用程序之间的联系 硬件: &#xff0…

cdockpane限制调整大小_影视后期制作小伙伴必看:使用AU对声音质量进行调整的三大技巧...

一、增幅一般人进入AU的音频调整界面&#xff0c;会使用图中的旋钮进行音量调整&#xff0c;这种操作是错误的&#xff0c;因为通过拖拽并不能确定调整音量的大小幅度&#xff0c;精准度极低&#xff0c;反复操作才能试出最佳音量&#xff0c;效率极低。最优方案是使用左侧效果…

html5css3js文件作业,HTML5 CSS3 JavaScriptWeb前端开发自测试卷2.docx

自测试卷2一、选择题1&#xff0e;使用标签在网页中成功地添加一张图片&#xff0c;必不可少的属性是( )。A&#xff0e;alt B&#xff0e;title C&#xff0e;src D&#xff0e;width2&#xff0e;使用CSS设置鼠标放置在链接上时的样式应使用以下哪个选择器( )。A&#xff0e;…

线程故事:Web应用程序中的ThreadLocal

本周&#xff0c;我花了一些合理的时间来消除Web应用程序中的所有ThreadLocal变量。 原因是他们造成了类加载器泄漏&#xff0c;我们不能再适当地取消部署我们的应用程序。 取消部署应用程序后&#xff0c;当GC根目录继续引用应用程序对象时&#xff0c;将发生类加载器泄漏。 如…

n-1位数

n-1位数 时间限制&#xff1a;3000 ms | 内存限制&#xff1a;65535 KB难度&#xff1a;1描述已知w是一个大于10但不大于1000000的无符号整数&#xff0c;若w是n(n≥2)位的整数&#xff0c;则求出w的后n-1位的数。 输入第一行为M&#xff0c;表示测试数据组数。接下来M行&…

Android之封装好的异步网络请求框架

1.简介 Android中网络请求一般使用Apache HTTP Client或者采用HttpURLConnection&#xff0c;但是直接使用这两个类库需要写大量的代码才能完成网络post和get请求&#xff0c;而使用这个MyHttpUtils库可以大大的简化操作&#xff0c;它是基于HttpURLConnection&#xff0c;所有…

华润置地php面试题_从一流到顶流|2020华润置地与沈阳一起美好

如果用一句话来形容华润置地进入沈阳13年的发展历程&#xff0c;你认为是什么&#xff1f;“从优秀到卓越”。用2020年的语言你给我翻译一下&#xff1f;“从一流到顶流”&#xff01;01/ 初识的美好犹记2007年1月&#xff0c;央企华润置地首进沈阳&#xff0c;在大馆原址呈现出…

金融工作用计算机吗,为什么计算机专业的人想转金融,而金融专业的想转计算机?...

1首先两个专业都很有前途。如果好好学IT&#xff0c;应该是走技术路线&#xff0c;30岁后逐渐开始搞些管理或者设计之类的。当然&#xff0c;继续搞技术也没问题。只是要不断学习&#xff0c;因为发展很快&#xff0c;IT业自身不断更新。很多人说IT枯燥&#xff0c;难学&#x…

Java GUI应用程序关闭陷阱

最近&#xff0c;我遇到了一个或两个Java GUI应用程序在关闭时无法关闭的问题。 它们似乎是一个过程&#xff0c;消耗着计算机资源。 今天&#xff0c;我深入探究了问题的根源&#xff0c;这是一个我以前从未意识到的棘手问题&#xff0c;所以我想我会分享一下。 理论上&#x…

shell启动程序脚本

#!/bin/bash#/usr/local/xxx/bin/xxxx.sh start#/usr/local/xxx/bin/startup.shfor i in find /server -name start.sh do fadirdirname $i //读取父目录 cd $fadir echo > nohup.out ./start.sh & sleep 2 echo "start succe…

Unity性能优化的N种武器

贴图&#xff1a; l 控制贴图大小&#xff0c;尽量不要超过 1024 x1024&#xff1b; l 尽量使用2的n次幂大小的贴图&#xff0c;否则GfxDriver里会有2份贴图&#xff1b; l 尽量使用压缩格式减小贴图大小&#xff1b; l 若干种贴图合并技术&#xff1b; l 去除多余的alpha…