日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/3 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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編程

總結

以上是生活随笔為你收集整理的adf435编程_动态ADF列车:以编程方式添加列车停靠点的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。