0

私はApacheWicketを使用しています...

  1. 私はJavaクラスを持っています:タスク。アクティブなタスクと完了したタスクがあります。

  2. アクティブなタスク用に並べ替え可能なdataViewがあります。

    final DataView<LongRunningTask> dataViewActive = new DataView<LongRunningTask>("sorting", dp) {
    
        private static final long serialVersionUID = 1L;
    
        @Override
        protected void populateItem(final Item<LongRunningTask> item) {
            LongRunningTask task = item.getModelObject();
    
            if(task.getRemainingTime() <= 0) {
                finishedTasks.add(item);
            }
                item.add(new Label("taskId", String.valueOf(task.getTask().getId()))); 
                item.add(new Label("startedBy", task.getTask().getUser()));
                item.add(new Label("characteristics", String.valueOf(task.getTask().getType() + " : " + task.getTask().getNoOfMessages()) + " : " + task.getTask().getTemplateFile())); 
                Label clock = new Label("timer", String.valueOf(task.getRemainingTime()));
                item.add(clock);
                clock.setOutputMarkupId(true);
                item.add(new ActionPanel("actions", item.getModel())); 
    
            }
    };
    
  3. 次に、FINISHEDタスクのデータビューを作成します。タスクが終了した場合(Task.finished = true)、タスクをアクティブなデータビューから削除して、終了したデータビューに追加する必要があります。

    final DataView<LongRunningTask> dataViewFinished = new DataView<LongRunningTask>("sorting", dp) {
    
        private static final long serialVersionUID = 1L;
    
        @Override
        protected void populateItem(final Item<LongRunningTask> item) {
            LongRunningTask task = item.getModelObject();
    
            if(task.getRemainingTime() <= 0) {
                finishedTasks.add(item);
            }
                item.add(new Label("taskId", String.valueOf(task.getTask().getId()))); 
                item.add(new Label("startedBy", task.getTask().getUser()));
                item.add(new Label("characteristics", String.valueOf(task.getTask().getType() + " : " + task.getTask().getNoOfMessages()) + " : " + task.getTask().getTemplateFile())); 
                Label clock = new Label("timer","finished");
                item.add(clock);
                clock.setOutputMarkupId(true);
                item.add(new ActionPanel("actions", item.getModel())); 
    
            }
    };
    

どうやってやるの?2番目のデータビューを作成できますが、UIの問題と競合がありました。最善の方法は何ですか?

よろしく

4

1 に答える 1

2

各データビューに使用しているプロバイダーが適切なオブジェクトのみを返していることを確認してください。以上です。モデルをオブジェクトの適切なリストで埋めておく限り、ビューにはそれらが表示されます。

まず、実際のpopulateメソッドからこれを取り除きます(これはVIEWであることに注意してください。ここには、ビューロジックのみを配置し、ビジネスロジックは配置しないでください)。

 if(task.getRemainingTime() <= 0) {
        finishedTasks.add(item);
 }

次に、DataProviderを実装して、終了したタスクまたは終了していないタスクのみを返すようにします。コンストラクターなどでブール値を渡すことができます。データプロバイダーの2つのインスタンスを2つのデータビューに渡します。1つはブール値true、もう1つはfalseです。

于 2013-01-23T16:54:27.990 に答える