0

パネル内で、取り外し可能なモデルを持つテーブルに listView を追加しています。

編集:

public class TaskDetailsPanel extends Panel {
    ...

  public TaskDetailsPanel(String id, CompoundPropertyModel<LongRunningTask> model) {
    super(id, model);
    Task task = (LongRunningTask) getDefaultModelObject();

    List<Timeframe> testList = task.getTimeframes();

   DetachableTimeframeModel dtm = new DetachableTimeframeModel(new Model<Task>(task));
    ListView frames = new ListView("frame", dtm) {
        @Override
        protected void populateItem(ListItem item) {
            Timeframe tf = (Timeframe) item.getModelObject();
            item.add(new Label("time", "von - bis"));
            item.add(new Label("sentFiles", String.valueOf(tf.getSentFiles())));
            item.add(new Label("receivedFiles", String.valueOf(tf.getReceivedFiles())));
            item.add(new Label("missingMsgIds", String.valueOf(tf.getMissingMsgIds())));
            item.add(new Label("receivedMsgIds", String.valueOf(tf.getReceivedMsgIds())));
        }
    };
        frames.setOutputMarkupId(true);
        add(frames);

       ...
    }
}

ここに私のカスタムdetableモデルがあります:

class DetachableTimeframeModel extends LoadableDetachableModel {

    LongRunningTask task;

    public DetachableTimeframeModel(LongRunningTask t) {
        task = t;
    }

    @Override
    protected List<Timeframe> load() {
        return task.getTimeframes();
    }
}

パネル内に新しいリスト List (たとえば ArrayList) を定義して項目を追加すると、機能します。しかし、リストが別の JavaBean からのものである場合、失敗します。

私は何が欠けていますか?

4

1 に答える 1

2

longRunningTask を含むモデルを DetachableTimeframeModel に渡します。

Wicket では、別のモデルに入れるためだけにモデルから何かを引き出すべきではありません:

class DetachableTimeframeModel extends LoadableDetachableModel {

    IModel<LongRunningTask> task;

    public DetachableTimeframeModel(IModel<LongRunningTask> t) {
        task = t;
    }

    @Override
    protected List<Timeframe> load() {
        return task.getObject().getTimeframes();
    }

    public void detach() {
        super.detach(),

        task.detach();
    }
}

TaskDetailsPanel のコンストラクターに渡されるモデルは、実際のタスクをどこかからロードできる必要があり、その参照を保持するだけではないことに注意してください。Wicket のコンポーネントとモデルは、セッション/ページ ストアにシリアル化されます。

于 2013-02-27T06:55:01.910 に答える