Проблемы с глубокой гибкой загрузкой значимых объектов (Ленивая загрузка во внешнем интерфейсе?)

Я использую Java-бэкэнд с гибким интерфейсом. И когда я хочу использовать функцию label, она не загружает свойства Indepth, такие как объект значения, как будто она загружается лениво на стороне flex, я уверен, что она не приходит с бэкэнда, потому что я проверила ее там.

У меня есть также в датагриде, что он не загружает все значения сразу.

например

Class John{
 var name:String;
var lastName:Doe;

}

Class Doe{
 var lastName:String;
}

Я спрашиваю у моего бэк-энда все Джона, а бэкэнд дает мне все Джона, в котором есть Доу. Теперь на гибкой стороне я запускаю событие результата из автоответчика, когда получаю эти данные. Но, тем не менее, он не может получить доступ к лани в Johns, свойство лани для John все еще нулевое. Когда я спрашиваю об этом во второй раз, теперь речь идет о лани, так что это выглядит как ленивая загрузка в переднем конце...

Что я делаю неправильно?

поздравил

2 ответа

Это сложно, чтобы полностью понять ваш вопрос. Однако у меня были проблемы в этом направлении, много-много раз. Итак, я понял общую проблему.

При использовании BlazeDS следует помнить, что классы, передаваемые по сети, сериализуются и десериализуются. Это означает, в упрощенном виде, что единственное, что пишется и читается по сети, - это поля / свойства каждого класса. Вы должны обратить ЗАКРЫТО внимание на основные типы данных в ваших классах как на стороне Java, так и на стороне Flex. Убедитесь, что все свойства / поля и общедоступные методы получения / установки совпадают, и убедитесь, что они свободны.

Под "чистым" я подразумеваю, что BlazeDS сбивается с толку, когда не может понять, какие переменные где хранить.

Хотя ваш класс Doe не является строкой, он содержит только строку. Таким образом, когда он отправляется по сети, он выглядит как строка. В таких случаях я видел, как лезли в замешательство. Он видит две строки, приходящие по сети, и не может понять, куда и куда. Для вас Джон содержит "Doe" и строку, но все, что BlazeDS действительно видит, в конце концов, это строка и строка.

Просто для проверки, в вашем базовом примере, измените Doe.lastName на Integer или какой-либо другой объект. Скорее всего, он перестанет обнуляться на другом конце. Если он по-прежнему равен нулю, значит, ваши классы ActionScript и Java (John & Doe) не совпадают должным образом или слишком неоднозначны.

Суть в том, что когда вы получаете данные, когда все обнуляется, это означает, что у вас есть проблема с сериализацией. BlazeDS не может понять, как читать то, что было написано в сети. Так что либо настройте свои поля, свойства и общедоступные методы получения / установки.... или напишите свой собственный метод для сериализации ваших объектов.

Эта страница описывает сериализацию Blazeds (а также, как справиться с ней самостоятельно) в ОТЛИЧНЫХ деталях:

http://livedocs.adobe.com/blazeds/1/blazeds_devguide/help.html?content=serialize_data_2.html

Как только я полностью понял это, у меня было намного меньше ошибок такого рода.

Надеюсь, это поможет,

-кг

Хорошо, я все еще не знаю, почему он это сделал, но я решил это с помощью flat dto's, теперь я использую полную архитектуру MVC...

Другие вопросы по тегам