0

ここに私の連絡先クラス:

連絡先クラス:
パッケージ com.gwt.sample.gwtdemoproject.shared;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;




public class Contact implements Serializable {

    private List<Contact> contactlist = new ArrayList<>();

    private static final long serialVersionUID = 1L;
    private String email;
    private String number;
    private String name;
    private String place;
    private Long  id;

    public Contact(String name, String number, String email, String place) {
        this.name = name;
        this.number = number;
        this.email = email;
        this.place = place;
    }

    public String getname() {
        return name;
    };

    public String getnumber() {

        return number;
    }

    public String getemail() {

        return email;
    }

    public String getplace() {

        return place;
    }

    public void setname(String name) {
        this.name = name;

    }

    public void setemail(String state) {
        this.email = state;
    }

    public void setplace(String place) {
        this.place = place;
    }

    public void setnumber(String number) {
        this.number = number;
    }
    public Long getid(){
        return this.id;
    }
    public Contact(){}

    public boolean removedata( Contact contact){
        int i = contactlist.size();
        if(contact==null ? i==0 : contact.equals(i));
        {
            contactlist.remove(contact);
        }
        return true;
        }

    }

サービス:

    package com.gwt.sample.gwtdemoproject.client.Service;

import java.util.List;

import com.google.gwt.user.client.rpc.RemoteService;
import com.google.gwt.user.client.rpc.RemoteServiceRelativePath;
import com.gwt.sample.gwtdemoproject.shared.Contact;

@RemoteServiceRelativePath("contactdata")

public interface ContactDataService extends RemoteService{

    public  List<Contact> getData();
    public  Contact addData(Contact contact);
    public  Contact removeData(Contact contact);


}

私のサービス非同期:

    package com.gwt.sample.gwtdemoproject.client.Service;

import java.util.List;

import com.google.gwt.user.client.rpc.AsyncCallback;
import com.gwt.sample.gwtdemoproject.shared.Contact;

public interface ContactDataServiceAsync {

void getData(AsyncCallback<List<Contact>> callback);
void addData(Contact contact, AsyncCallback<Contact> callback);
void removeData( Contact contact,AsyncCallback<Contact> callback);


}

myservice の実装

    package com.gwt.sample.gwtdemoproject.server;

import java.util.ArrayList;
import java.util.List;

import com.google.gwt.user.server.rpc.RemoteServiceServlet;
import com.gwt.sample.gwtdemoproject.client.Service.ContactDataService;
import com.gwt.sample.gwtdemoproject.shared.Contact;

public class ContactDataServiceImpl extends RemoteServiceServlet implements
        ContactDataService {

    private static final long serialVersionUID = 1L;
    List<Contact> contactlist = new ArrayList<>();

    public ContactDataServiceImpl() {
    }
    @Override
    public List<Contact> getData() {
        return contactlist;
    }
    @Override
    public Contact addData(Contact contact) {
        contactlist.add(contact);
        return contact;
    }
     @Override
     public Contact removeData(Contact contact) {
         contactlist.remove(contact);
        return contact;
     }
     public List<Contact> getlist(){
        return contactlist; 
     }


}

私のGUI/クライアント

    table = new CellTable<Contact>();

        TextColumn<Contact> nameColumn = new TextColumn<Contact>() {
            @Override
            public String getValue(Contact contact) {
                return contact.getname();
            }
        };

        TextColumn<Contact> emailColumn = new TextColumn<Contact>() {
            @Override
            public String getValue(Contact contact) {
                return contact.getemail();
            }
        };
        //
        TextColumn<Contact> numberColumn = new TextColumn<Contact>() {
            @Override
            public String getValue(Contact contact) {
                return contact.getnumber();
            }
        };
        //
        Column<Contact, String> placeColumn = new Column<Contact, String>(
                new EditTextCell()) {
            @Override
            public String getValue(Contact object) {
                return object.getplace();
            }
        };
        ButtonCell btncell = new ButtonCell();
        //
        Column<Contact, String> deleteColumn = new Column<Contact, String>(
                btncell) {

            @Override
            public String getValue(Contact object) {

                return "X";
            }
        };

        table.addColumn(nameColumn, "Name");
        table.addColumn(numberColumn, "Mobile");
        table.addColumn(emailColumn, "Email");
        table.addColumn(placeColumn, "City");
        table.addColumn(deleteColumn, "");
        // getting list
        Myservice = (ContactDataServiceAsync) GWT
                .create(ContactDataService.class);
        ServiceDefTarget serviceDef = (ServiceDefTarget) Myservice;
        serviceDef.setServiceEntryPoint(GWT.getModuleBaseURL() + "contactdata");

        final ContactDataServiceAsync service = (ContactDataServiceAsync) GWT
                .create(ContactDataService.class);
        final AsyncCallback<List<Contact>> getcallback = new AsyncCallback<List<Contact>>() {
            @Override
            public void onSuccess(List<Contact> result) {
                dataProvider.addDataDisplay(table);
                List<Contact> list = dataProvider.getList();
                for (Contact contact : result) {
                    list.add(contact);
                }
            }

            @Override
            public void onFailure(Throwable caught) {
                Window.alert(caught.getMessage());
            }
        };
        service.getData(getcallback);

        // Delete Row
            deleteColumn.setFieldUpdater(new FieldUpdater<Contact, String>() {

            @Override
                public void update(int index, Contact object, String value) {
                cont = object;

                    Myservice.removeData(cont, new AsyncCallback<Contact>() {

                    @Override
                        public void onFailure(Throwable caught) {
                        Window.alert(caught.getMessage());
                    }
                    @Override
                        public void onSuccess(Contact result) {
                        List<Contact> list = dataProvider.getList();
                        list.remove(result);
                        table.redraw();
                        int sizeoflist = list.size();
                        System.out.println(sizeoflist);

                    }
                });

                }
            });
        // add row
        addBtn.addClickHandler(new ClickHandler() {

            @Override
            public void onClick(ClickEvent event) {
                savedata();
            }
        });

        // root
        vpanel.setWidth("100%");
        vpanel.setHorizontalAlignment(VerticalPanel.ALIGN_CENTER);
        hpanel.setWidth("100%");
        table.setWidth("100%");
        hpanel.add(name);
        hpanel.add(number);
        hpanel.add(email);
        hpanel.add(place);
        hpanel.add(addBtn);
        vpanel.add(table);
        vpanel.add(hpanel);

        RootPanel.get().add(vpanel);
    }

    protected void savedata() {

        cont = new Contact(name.getText(), number.getText(), email.getText(),
                place.getText());

        Myservice.addData(cont, new AsyncCallback<Contact>() {

            @Override
            public void onFailure(Throwable caught) {
                Window.alert(caught.getMessage());
            }

            @Override
            public void onSuccess(Contact result) {
                List<Contact> list = dataProvider.getList();
                list.add(result);
                table.redraw();
            }
        });
    }

出力:エラーはありませんが、サーバーからレコードを削除できません(更新時に機能しませんでした)

次のコードでcelltableから削除できました

// Delete Row 
        deleteColumn.setFieldUpdater(new FieldUpdater<Contact, String>() {

            @Override
            public void update(int index, Contact object, String value) {
                dataProvider.getList().remove(object);
                dataProvider.refresh();
                table.redraw();

            }
        });
4

1 に答える 1

0

あなたのコードに基づいて1つの小さな例を作成しました(警告/エラーの問題のために変更する必要がありました...)、それは私にとってはうまくいきます。

あなたが試すことができます:

@Override
 public void onSuccess(Contact result) {
    List<Contact> list = dataProvider.getList();
    list.remove(cont); //Try with this reference
    table.redraw();
    int sizeoflist = list.size();
    System.out.println(sizeoflist);
}

その理由は、サーバーから 1 つの異なるオブジェクトを返すためです (Contact のクラスのhasCodeおよびequalsメソッドを @Override できます。そうしないと、コンテンツが同じであってもオブジェクトが異なります。クライアント、サーバー (両方のリストが違う!))。

注:サーバーのコードを調べてください。それがあなたのやりたいことを実行しているかどうかわからないからです。

ハッピーコーディング!

于 2013-06-11T12:19:43.593 に答える