Сериализация объекта в GWT - PullRequest
6 голосов
/ 08 апреля 2009

Какой самый простой способ сериализации бина в строку с использованием GWT? Я предпочитаю не использовать GWT.create () вызовов.

Ответы [ 6 ]

4 голосов
/ 19 апреля 2009

Отказ от ответственности: Сериализация bean-компонента в URL не такая уж хорошая идея для GWT. Я узнал, что если нужно поместить данные в URL, их должно быть как можно меньше и только то, что необходимо для восстановления состояния вашей страницы. Посмотрите, как Gmail использует свои маркеры истории, и вы увидите, что он довольно минимален.

С этим отказом от ответственности:

Для проекта GWT, над которым я работал, я просто выписал значения bean-компонента, разделенного разделителем. При чтении значений обратно я использовал метод String.split (), чтобы получить массив. С этим массивом я присваиваю значения обратно свойствам правого бина. В коде:

public class Sample {

    private int a;
    private boolean b;
    private String c;
    //getters and setters for fields not shown

    public String toHistoryToken(){
        return a+"/"+b+"/"+c;
    }
    public void fromHistoryToken(String token){
        String[] values=token.split("/");
        a=Integer.parseInt(values[0]);
        b=Boolean.parseBoolean(values[1]);
        c=values[2];
    }
}

Для более сложных сценариев вам, возможно, придется делать более сложные вещи. Например, для вложенных объектов вы должны написать код для передачи значений дочерним объектам.

Кроме того, помните, что вы должны убедиться, что любые значения, которые вы используете, не содержат разделитель. Поэтому, если вы знаете, что ваши строки могут содержать «/», вам, возможно, придется выполнить операцию замены (), чтобы избежать вложенных разделителей.

1 голос
/ 20 апреля 2009
1 голос
/ 13 апреля 2009

Я не уверен, что понимаю, чего вы в конечном итоге пытаетесь достичь.

Если вы действительно хотите отправлять строки назад и вперед, вам не нужно делать что-либо - вы получаете это бесплатно, используя обычный механизм GWT RPC. Просто создайте метод, который возвращает java.lang.String, создайте сопутствующую реализацию и интерфейс Async, и все готово.

Если, с другой стороны, вы действительно хотите отправить бин, просто убедитесь, что он имеет конструктор с нулевым аргументом и реализует Serializable или IsSerializable.

0 голосов
/ 18 апреля 2009

В конечном итоге GWT работает на JavaScript (даже если он написан на Java). В этом смысле «Java-бины» - это не то, что вы легко можете найти в клиенте, но они отлично работают на сервере (в Java).

Если вы согласны с тем, что бин - это на самом деле просто объект без методов, вы намерены использовать их для перемещения данных. Исходно в JavaScript, JSON действует как чрезвычайно гибкий контейнер для данных. На стороне сервера массив Beans может быть преобразован в JSON с помощью BeanUtils (и немного прохождения). JSON можно сериализовать в GWT в виде строки, а в GWT есть анализатор для преобразования JSON обратно в объекты JavaScript для клиента.

Вероятно, это не самый простой способ сделать это, но он очень гибок, как только вы заработаете.

0 голосов
/ 16 апреля 2009

Могут быть некоторые нюансы GWT, которые усложняют вещи, но обычно такие вещи, как:

  • Связывание / отображение XML-данных, например, JAXB и XStream может сделать это
  • С JSON библиотеки, такие как Jackson , могут выполнять гибкое полное связывание bean-компонентов, аналогично JAXB, но с еще меньшей конфигурацией (и более высокой скоростью, если это вообще имеет значение).

должно работать.

0 голосов
/ 13 апреля 2009

Может быть, это то, что вы ищете?

Json <-> Java-сериализация, работающая с GWT

Расширенная версия:

Использование библиотеки Json-lib:

http://json -lib.sourceforge.net /

Вы можете сделать это (переходя от бина к строке json):

http://json -lib.sourceforge.net / snippets.html # Creating_a_JSONObject_from_a_JavaBean

...