2015-07-23 2 views
1

На стороне сервера, я создаю java.util.Hashmap, заполняю его значениями (ключ и значение являются строками) и передают его обратно клиенту с помощью обратного вызова async. Он пуст, когда он возвращается на клиентскую сторону.Hashmap пуст на обратном вызове GWT async

Я могу реплицировать это с помощью нового нового хэшмапа, который используется только в одном месте на стороне сервера. Java 6 и GWT обслуживание сторона 2,7

Сервер:

public class Service extends RemoteServiceServlet implements IService { 

    public Model buildModel() { 
    Model model = new Model(); 
    model.addItemToMyMap("key", "value"); 
    return model; 
    } 
} 

Модель:

public class Model implements Serializable { 

      private Map<String, String> myMap = new HashMap<String, String>(); 

      public void addItemToMyMap(String key, String value) { 
       if(key != null) { 
       myMap.put(key, value); 
      } 
      } 
      public Map<String, String> getMyMap() { 
       return myMap; 
      } 
     } 

Асинхронный интерфейс:

public interface IServiceAsync { 

public void buildModel(AsyncCallback<Model> callback); { 
} 

стороне клиента:

service.buildModel(new AsyncCallback<Model>() { 
     public void onSuccess(Model model) { 
     logger.warning(model.getMyMap().size()); 
    } 
     public void onFailure(Throwable caught) { 
     logger.warning("ERROR!"); 
    } 

} 
+2

Im не 100% на этом, но я уверен, что вашей «Модели» необходимо реализовать интерфейс «Serializable». –

+0

Неплохо, я просто забыл включить его. Другие примитивные и строковые свойства прекрасны. – AfterWorkGuinness

+0

Вы имели в виду, что класс 'Model' должен реализовывать интерфейс' IsSerializable', не так ли? – StephaneM

ответ

0

Проблема решена. Eclipse save actions делал окончательную карту и тем самым предотвращал сериализацию. Когда я удалил последний модификатор (и не позволил Eclipse добавить его обратно), я смог увидеть содержимое карты на стороне клиента.

Смежные вопросы