0

したがって、送信時にこのボタンがあります。実行される機能がいくつかあり、選択したチェックボックスをリストから削除する必要があります。

以下のコードは、そのボタンの使用法と、特定のチェックボックスの選択を削除するために行った実装を示しています。

       Button resumeDrive = new AjaxButton("resume", driveSearchForm)
        /**
         * 
         */
        private static final long serialVersionUID = -7016746377299867219L;

        @Override
        protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
            log.info("envoking resume");
            target.addComponent(form);
            try {

                List<DashboardModel> list = (List<DashboardModel>) group.getDefaultModelObject();
                log.info("drives data : " + list);
                if (list != null) {
                    List<Long> drives = new ArrayList<Long>();
                    List<DashboardModel> drivesToRemove = new ArrayList<DashboardModel>();
                    for (DashboardModel drive : list) {
                        drives.add(drive.getExecutionUnitId());

                        drivesToRemove.add(drive);
                        log.info("drivesToRemove :" + drivesToRemove);
                    }
                    log.info("selected drive: " + drives);
                    if (drives.size() > 0) {
                        log.info("Execution Ids to resume : " + drives);

                        driveResumeService.resumeDrives(drives);
                        drivesData.removeAll(drivesToRemove);
                        log.info("drivesdata :" + drivesData);

                        warn("Execution Ids to resume : " + drives);
                    } else {
                        warn("No drives selected for resuming.");
                    }
                } else {
                    info("No drives to resume.");
                }
            } catch (Exception e) {
                warn("Failed to resume jobs. " + e.getMessage());
                log.info("Failed to resume jobs", e);
            }
            target.addComponent(group);
        }
        @Override
        protected void onError(AjaxRequestTarget target, Form<?> form) {
            target.addComponent(form);
        }
            driveSearchForm.add(resumeDrive);
    resumeDrive.setDefaultFormProcessing(true);
    resumeDrive.add(new AjaxFormValidatingBehavior(driveSearchForm, "onClick"));

--> my model returns this driveData.
    --->   I'm sticking the pageableListView code also alongside.

            private CheckGroup<DashboardModel> group;
            group = new CheckGroup<DashboardModel>("group", new ArrayList<DashboardModel>());
    driveSearchForm.add(group);
    group.add(new CheckGroupSelector("allSelected"));
    group.setOutputMarkupId(true);

     pageableListView = new PageableListView<DashboardModel>("searchResults", driveDataModel, 10) {
        private static final long serialVersionUID = 1L;

        @Override
        protected void populateItem(ListItem<DashboardModel> item) {
            item.add(new Check("check", item.getModel()));
            item.add(new Label("name", item.getModelObject().getName()));
            item.add(new Label("status", item.getModelObject().getStatus().toString()));
            item.add(new Label("driveUrl", item.getModelObject().getDriveURL()));
        }

    };
    pageableListView.setRenderBodyOnly(false);
    pageableListView.setReuseItems(true);
    group.add(pageableListView);
    group.add(new PagingNavigator("navigator", pageableListView));

そのため、モデルが更新されていることがわかりましたが、UIで同じことが発生していません。つまり、選択したチェックボックスを更新されたリストから削除したいのですが.....提案してください......

4

1 に答える 1

1

差出人ListView#setReuseItems()

ただし、listViewモデルオブジェクトを変更する場合は、ListItemを再構築するためにlistView.removeAll()を手動で呼び出す必要があります。

したがって、reuseItemstrueの場合、リストビューでモデル呼び出しを変更した時点でremoveAll

于 2012-07-26T14:30:41.043 に答える