Wicket - 将对象从一个数据视图移动到另一个数据视图

时间:2013-01-23 16:25:23

标签: ajax wicket repeater move dataview

我正在使用Apache Wicket和......

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

  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())); 
    
            }
    };
    
  4. 我该怎么做?我可以创建第二个数据视图,但是存在UI问题和冲突。什么是最好的方式?

    问候

1 个答案:

答案 0 :(得分:2)

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

首先,从实际的populate方法中删除它(记住这是VIEW,你应该只在这里放置视图逻辑,没有业务逻辑):

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

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