0

我正在使用 Apache Wicket 和...

  1. 我有一个java类:任务。有活动和已完成的任务。

  2. 我有一个用于活动任务的可排序数据视图:

    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())); 
    
            }
    };
    

我怎样才能做到这一点?我可以创建第二个数据视图,但存在 UI 问题和冲突。什么是最好的方法?

问候

4

1 回答 1

2

确保您用于每个数据视图的提供程序仅返回适当的对象。就这些。只要您使模型充满适当的对象列表,视图就会显示它们。

首先,从实际的填充方法中去掉这个(记住这是视图,你应该只把视图逻辑放在这里,没有业务逻辑):

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

其次,实现您的 DataProvider,使其仅返回已完成或未完成的任务。您可以在它的构造函数或类似的东西中传递一个布尔值。将数据提供者的两个实例传递给两个数据视图,一个为布尔值 true,另一个为 false。

于 2013-01-23T16:54:27.990 回答