1

リストボックスから選択したアイテムを正常に削除しましたが、その後、すべてのオブジェクトがデータベースから削除され、リストボックスが更新されました。次に、はいといいえのオプションを含む確認ボックスを追加しましたが、リストが更新されませんでした。zkフォーラムで同様の問題を解決するこのスレッドを見ました。実装しましたが、クラスキャスト例外が発生しました

私はMVVMを使用しています

http://forum.zkoss.org/question/73640/refreshing-listbox-after-deleting-an-itemrow/

例外を取得するコード:

AnnotateDataBinder binder = (AnnotateDataBinder) userWin.getAttribute("binder");
                    binder.loadAll();

例外:

Mar 21, 2013 5:22:23 PM org.zkoss.zk.ui.impl.UiEngineImpl handleError:1352
SEVERE: >>java.lang.ClassCastException: org.zkoss.bind.AnnotateBinder cannot be cast to org.zkoss.zkplus.databind.AnnotateDataBinder

あなたから聞いて楽しみにして。ネットを検索しましたが、zk を更新する以外に何も見つかりませんでした。私はすでに zk 6.5.1.1 の最新バージョンを使用しています。

前もって感謝します。

@提案されたコード行を追加した後、私のリストは更新されませんでした。これが私の方法です

 @Override
    @Command("deleteAllSelected")
    @NotifyChange({"selectedObject","objectList"})
    public void deleteAllSelected() {
        logger.info("in deleteAllSelected()>>>>>>>>>>>>>>>>>>>>>>>>>>>>");

        logger.info("direct selection: " + objectList.getSelection());
        final Set<UserIntelliopsDTO> setMe = objectList.getSelection();
        logger.info("selectedion size in dellete all" + setMe.size());



        EventListener<ClickEvent> clickListener = new EventListener<Messagebox.ClickEvent>() {
            public void onEvent(ClickEvent event) throws Exception {
                if (Messagebox.Button.YES.equals(event.getButton())) {
                    int i =0;
                    for(UserIntelliopsDTO dto:setMe){

                        userService.deleteUserIntelliops(dto.getUserIntelliOps().getUserId());

                        logger.info("siapa:userIntelliops " + dto.getUserIntelliOps() +  dto.getUserIntelliOps().getUserId());
                        selectedObject = null;

                        logger.info("iteration: " + i);
                        ++i;
                    }

                    selectedObject = null;
                    deleteAllSelectedButton.setVisible(false);
                    enableEditMode(true);


                }
            }
        };
        Messagebox.show("Are you sure you want to delete all selected records?", "Delete All Selected",
                new Messagebox.Button[] { Messagebox.Button.YES,
                        Messagebox.Button.NO }, Messagebox.QUESTION,
                clickListener);


        BindUtils.postNotifyChange(null, null, this, "*");

    }
4

1 に答える 1

4

私はあなたがMVVMモデルを使用していると仮定しています..したがって、メソッドの下の削除ボタンをクリックすると、このことがコード化されます...

 @Command
public void doDeleteItems(@ContextParam(ContextType.VIEW) Component view) {
        logger.debug("Delete Icon selected");

if (myModel.getSelectedListItem() == null || myModel.getSelectedListItem().isEmpty()) {
            showError("No rows are selected");
        } else {

Messagebox.show("Are you sure you want to delete?", "Alert !!", Messagebox.YES | Messagebox.NO, Messagebox.QUESTION,new org.zkoss.zk.ui.event.EventListener() {

public void onEvent(Event evt) throws InterruptedException {
    if (evt.getName().equals("onYes")) {
//Add code for Deletion
  if (listModel.contains(deletedObj))
listModel.remove(deletedObj); 
}
else{
//Do somthing else
}
BindUtils.postNotifyChange(null, null, this, "*");//this means current viewmodel object and refresh the variables

}

私がしBindUtils.postNotifyChange()たように、リストを更新するか、使用することができます NotifyChange("*")

レコードを削除した後、リストからオブジェクトを削除する必要があります...

于 2013-03-21T12:43:49.003 に答える