Впервые здесь задают вопрос и все еще учатся тому, как лучше форматировать вещи ... так что извините за формат, так как он выглядит не очень хорошо
Я начал изучать флекс, взял книгу и попытался следовать приведенным в ней примерам. Тем не менее, я застрял с проблемой. У меня есть страница JSP, которая возвращает XML, который в основном имеет список продуктов. Я пытаюсь разобрать этот xml, другими словами, пройти через продукты, создать объекты для каждого узла продукта и сохранить их в ArrayCollection. Проблема, которую я считаю, заключается в том, что я не использую правильный способ навигации по XML.
XML, возвращаемый с сервера, выглядит следующим образом:
<?xml version="1.0" encoding="ISO-8859-1"?><result type="success">
<products>
<product>
<id>6</id>
<cat>electronics</cat>
<name>Plasma Television</name>
<desc>65 inch screen with 1080p</desc>
<price>$3000.0</price>
</product>
<product>
<id>7</id>
<cat>electronics</cat>
<name>Surround Sound Stereo</name>
<desc>7.1 surround sound receiver with wireless speakers</desc>
<price>$1000.0</price>
</product>
<product>
<id>8</id>
<cat>appliances</cat>
<name>Refrigerator</name>
<desc>Bottom drawer freezer with water and ice on the door</desc>
<price>$1200.0</price>
</product>
<product>
<id>9</id>
<cat>appliances</cat>
<name>Dishwasher</name>
<desc>Large capacity with water saver setting</desc>
<price>$500.0</price>
</product>
<product>
<id>10</id>
<cat>furniture</cat>
<name>Leather Sectional</name>
<desc>Plush leather with room for 6 people</desc>
<price>$1500.0</price>
</product>
</products></result>
И у меня есть гибкий код, который пытается перебрать продукты, подобные следующим:
private function productListHandler(e:JavaFlexStoreEvent):void
{
productData = new ArrayCollection();
trace(JavaServiceHandler(e.currentTarget).response);
for each (var item:XML in JavaServiceHandler(e.currentTarget).response..product )
{
productData.addItem( {
id:item.id,
item:item.name,
price:item.price,
description:item.desc
});
}
}
с трассировкой, я вижу, что xml возвращается с сервера. Тем не менее, я не могу попасть внутрь цикла, как если бы XML был пуст. Другими словами, JavaServiceHandler (e.currentTarget) .response..product должен ничего не возвращать. Может кто-нибудь, пожалуйста, помогите / укажите, что я могу делать неправильно.
Мой класс JavaServiceHandler выглядит следующим образом:
package com.wiley.jfib.store.data
{
import com.wiley.jfib.store.events.JavaFlexStoreEvent;
import flash.events.Event;
import flash.events.EventDispatcher;
import flash.net.URLLoader;
import flash.net.URLRequest;
public class JavaServiceHandler extends EventDispatcher
{
public var serviceURL:String = "";
public var response:XML;
public function JavaServiceHandler()
{
}
public function callServer():void
{
if(serviceURL == "")
{
throw new Error("serviceURL is a required parameter");
return;
}
var loader:URLLoader = new URLLoader();
loader.addEventListener(Event.COMPLETE, handleResponse);
loader.load(new URLRequest(serviceURL));
// var httpService:HTTPService = new HTTPService();
// httpService.url = serviceURL;
// httpService.resultFormat = "e4x";
// httpService.addEventListener(Event.COMPLETE, handleResponse);
// httpService.send();
}
private function handleResponse(e:Event):void
{
var loader:URLLoader = URLLoader(e.currentTarget);
response = XML(loader.data);
dispatchEvent(new JavaFlexStoreEvent(JavaFlexStoreEvent.DATA_LOADED) );
// var httpService:HTTPService = HTTPService(e.currentTarget);
// response = httpService.lastResult.product;
// dispatchEvent(new JavaFlexStoreEvent(JavaFlexStoreEvent.DATA_LOADED) );
}
}
}
Несмотря на то, что я называю это своим, и это не так на самом деле. Это из книги Flex в качестве примера кода, который не работает, см. Рисунок.
Любая помощь приветствуется.
Спасибо
джон