adf435编程_动态ADF列车:以编程方式添加列车停靠点

adf435编程

我将展示如何以编程方式“即时”将火车停靠站添加到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

adf435编程

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

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

相关文章

JAVA消息服务JMS规范及原理详解

一、简介 JMS即Java消息服务&#xff08;Java Message Service&#xff09;应用程序接口&#xff0c;是一个Java平台中关于面向消息中间件&#xff08;MOM&#xff09;的API&#xff0c;用于在两个应用程序之间&#xff0c;或分布式系统中发送消息&#xff0c;进行异步通信。Ja…

php mk的支持扩展,Linux部署Redis及PHP-redis扩展

Redis是一个key-value存储系统&#xff0c;属于我们常说的NoSQL。它遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库&#xff0c;并提供多种语言的API。它常用在缓存、队列、Pub/Sub、计数统计、排行榜、投票与排序等场景。本文介绍如何在CentOS7上安装…

定制Hamcrest Matchers

本文是我们名为“ 用Mockito进行测试 ”的学院课程的一部分。 在本课程中&#xff0c;您将深入了解Mockito的魔力。 您将了解有关“模拟”&#xff0c;“间谍”和“部分模拟”的信息&#xff0c;以及它们相应的Stubbing行为。 您还将看到使用测试双打和对象匹配器进行验证的过…

Fiddle用于移动端抓包

一、什么情况下可以用到 1、调查参考其他移动端网站的抓包&#xff0c;他们传输方式。如微信上京东的智能机器人的包、移动端的请求接口格式、如何实现的效果等。 2、调试本地移动端页面的测试页面效果是否有问题。如:页面的样式、js、结构等。 二、操作(http) a、安装猎豹免费…

php中得到复选框的数据的代码,表单复选框向PHP传输数据的代码

表单复选框向PHP传输数据的代码表单复选框就是checkbox1、checkbox的应用复制代码 代码如下:2、由于我传输的是在php循环中产生的数组&#xff0c;因此value也要设成变量&#xff1a;for($i0;$i<10;$i){?>">]" value"要传输的内容">]" v…

ubuntu14.04不能安全卸载移动硬盘

ubuntu14.04不能安全卸载移动硬盘 sudo udisksctl unmount -b /dev/sdb1 udisksctl power-off -b /dev/sdb hdparm -Y /dev/sdb 转载于:https://www.cnblogs.com/fedorayang/p/6563552.html

Kioptrix-2

环境搭建 这个靶场环境稍微有点麻烦&#xff0c;首次打开的时候&#xff0c;需要将靶机从VM中移除&#xff08;注意是 从VM里面移除&#xff09;&#xff0c;然后利用nodpad等工具打开vmx文件&#xff0c;然后两步&#xff1a; 所有以“ethernet0”开头的条目并保存更改。然后…

php 递归到空如何处理,php递归调用删除数组空值元素的方法

这篇文章主要介绍了php递归调用删除数组空值元素的方法,涉及php递归调用操作数组的相关技巧,非常具有实用价值,需要的朋友可以参考下本文实例讲述了php递归调用删除数组空值元素的方法。分享给大家供大家参考。具体如下&#xff1a;该函数可以删除数组里的所有空值元素&#xf…

lnmp pathinfo问题

location / { if (!-e $request_filename) {rewrite ^/(.*)$ /index.php/$1 last;break;}}location ~ \.php {fastcgi_pass 127.0.0.1:9000; //这里不用担心你的服务器的ip是否和这个不一样&#xff0c;不用怀疑&#xff0c;//这样写就行了fastcgi_index index.php;…

maven配置testng_TestNG和Maven配置指南

maven配置testng为了有用&#xff0c;自动测试应该运行得非常快。 否则&#xff0c;将不会在开发期间经常运行&#xff0c;甚至在开发人员工作站上的默认配置中将被忽略。 最简单的规则是只编写小型单元测试&#xff0c;该测试将模拟给定类的邻居。 然而&#xff0c;有时在IoC容…

oracle00011,oracle11g 导出表报EXP-00011:table不存在。

oracle11g&#xff0c;在用exp命令备份数据库时&#xff0c;如果表中没有数据报EXP-00011错误&#xff0c;对应的表不存在。这导致对应的空表无法备份。原因&#xff1a;11g默认创建一个表时不分配segment&#xff0c;只有在插入数据时才会产生(当然也可以强制分配)&#xff0c…

《中国文化要略》第八章 古代教育 第九章 科举制度

转载于:https://www.cnblogs.com/bgd140206319/p/6565654.html

Hamcrest Matchers教程

本文是我们名为“ 用Mockito进行测试 ”的学院课程的一部分。 在本课程中&#xff0c;您将深入了解Mockito的魔力。 您将了解有关“模拟”&#xff0c;“间谍”和“部分模拟”的信息&#xff0c;以及它们相应的Stubbing行为。 您还将看到使用测试双打和对象匹配器进行验证的过…

oracle 回滚空间查询,oracle回滚段和回滚表空间操作

1、查询回滚段信息&#xff1a;状态为ONLINE&#xff0c;当前UNDO表空间为undotbs1SQL>select segment_name, owner, tablespace_name, status from dba_rollback_segs;SEGMENT_NAME OWNER TABLESPACE_NAME STATUS------------------------------ ------ ------------------…

win7下安装 python2 和python3

一直纠结于选择py2还是py3&#xff0c;不如在同一系统下安装两个版本就好了。 1、安装python2.7和python3.5 直接到官网https://www.python.org/下载&#xff0c;安装就可以了。 2.安装比较简单&#xff0c;点exe文件一直下一步就可以了&#xff08;注意&#xff1a;安装的时候…

oracle分页查询加总数,oracle count 百万级 分页查询记要总数、总条数优化

oracle count 百万级 分页查询记录总数、总条数优化oracle count 百万级 查询记录总数、总条数优化最近做一个项目时&#xff0c;做分页时&#xff0c;发现分页查询速度很慢&#xff0c;分页我做的是两次查询&#xff0c;一次是查询总数&#xff0c;一次是查询分页结果/** 查询…

mysql为字段值添加或者去除前缀、后缀(查询字段拼值)

添加前缀update ecs_goods set goods_nameconcat(新中式,goods_name) where cat_id 4; 添加后缀update ecs_goods set goods_nameconcat(goods_name,新中式) where cat_id 4; 删除 update ecs_goodsset goods_nameright(goods_name,length(goods_name)-1) where cat_id 4; 其中…

maven使用testng_使用ReportNG更好看的TestNG HTML测试报告– Maven指南

maven使用testng当“扩展TestCase”是编写测试中必不可少的部分时&#xff0c; TestNG是作为JUnit 3的注释驱动替代创建的测试框架。 即使到现在&#xff0c;它也提供了一些有趣的功能&#xff0c;例如数据提供程序&#xff0c;并行测试或测试组。 在我们的测试不是从IDE执行的…

谈谈你对oracle的认识,对Oracle存储过程的几点认识

1、写Oracle存储过程时最好不要在其中写Commit语句。一般调用程序会自动Commit数据&#xff0c;比如用NHibernate调用的时候&#xff0c;NHibernate就会自动Commi1、写Oracle存储过程时最好不要在其中写Commit语句。一般调用程序会自动Commit数据&#xff0c;&#xff0c;比如用…

1046. 划拳(15)

1046. 划拳(15) 划拳是古老中国酒文化的一个有趣的组成部分。酒桌上两人划拳的方法为&#xff1a;每人口中喊出一个数字&#xff0c;同时用手比划出一个数字。如果谁比划出的数字正好等于两人喊出的数字之和&#xff0c;谁就赢了&#xff0c;输家罚一杯酒。两人同赢或两人同输则…