Sorry, I did have it declared correctly but still no luck. I am SO stuck
and my boss is on my tail like mad now :-(
The actual code (I had typed the email manually) has it declared
properly as:
public var urlButtons: ArrayCollection;
on the Flex side, and it's declared as a List (that ultimately contains
instances of the class UrlButtons, which I have a mirror of on the Flex
side.
The flex class has the proper [RemoteClass(alias= tag in front of it.
Is it that I have an ArrayCollection of a strongly typed object? I'd
figure if the compiler built the VO and saw the
[RemoteClass(alias="com.plateau.etc.etc.")] directive pointing to the
back end class, it would know what to do when it got an ArrayCollection
containing instances of that.
Is it that that ArrayCollection is a property of another translated
class?
Eg: (forgive the pseudo-code, it's faster)
MyClass {
public urlButtons ArrayCollection;
}
Where urlButtons is an AC of instances of the UrlButtons class, a VO
declared on the Java side and having an equivalent VO class on the Flex
side, properly tagged with the RemoteClass var. What I find odd is that
Charles Web Debugging Proxy's AMF inspection shows that particular
property with the proper Java class name and namespace, but it shows as
"External Object" instead of just "Object"
As this is just a demo, the SWF is embedded in a JSP and I can't really
debug it without some hacking of the template since we have an
authentication hack in there that requires the hand-written JSPs help in
getting the session over the JavaScript bridge to Flex. Otherwise I
might be able to get more info.
All I know is Flex thinks that ArrayCollection is translating as a plain
old Object and throws an exception. (But it does expand out in Charles
just fine.)
What on earth am I doing wrong, possibly?
-Alan
________________________________
From: [email protected] [mailto:[EMAIL PROTECTED] On
Behalf Of Robert Cadena
Sent: Tuesday, April 29, 2008 4:15 PM
To: [email protected]
Subject: Re: [flexcoders] BlazeDS, List of VOs inside a VOs won't
translate
Hi Alan,
the declaration of the urlButtons field in the AS object is a little
off. it might just be that you typed it in, but just in case, it should
be:
public var urlButtons:ArrayCollection;
The value type should be converted automatically. I have an application
running that has a list in the java side and maps automatically to an
arraycollection. have you tried just putting a breakpoint before the
foreach in FB and then inspecting the result, first making sure that the
CatalogItemVOX is actually getting mapped to the response objects you
received. After that, I'd manually inspect the CatalogItemVOX and see
what its fields are. so, basically, inspect "data" and make sure its
type is CatalogItemVOX. use the fb3 debugger too.
/r
On Tue, Apr 29, 2008 at 11:03 AM, Alan Prather
<[EMAIL PROTECTED]> wrote:
Jeff,
According to the documentation, all Java Collections will be
automatically translated to an ArrayCollection on the front end. That
seems to be the case for the list of parent VOs, but within them my
lists don't translate to ArrayCollection. I'm not sure why, but it's
something I can expand out in Charles, but I can't get it to cast to
anything in Flex (EG, trying to cast it to ArrayCollection throws an
exception. It's really weird.
Something tells me that the reference to 'external object' in Charles
must be a clue! Thanks for your input Jeff!
Help! Anyone? Anyone?
-Alan
________________________________
From: [email protected] <mailto:[email protected]>
[mailto:[email protected] <mailto:[email protected]> ]
On Behalf Of Battershall, Jeff
Sent: Tuesday, April 29, 2008 1:55 PM
To: [email protected] <mailto:[email protected]>
Subject: RE: [flexcoders] BlazeDS, List of VOs inside a VOs won't
translate
Alan,
I know in LCDS that there isn't an analog for ArrayCollection. I'd try
having your nested VOs be simply an array and if you need to create an
ArrayCollection on the client side do so using your array of VOs as the
source attribute.
Jeff
-----Original Message-----
From: [email protected]
<mailto:[email protected]> [mailto:[email protected]
<mailto:[email protected]> ] On Behalf Of Alan Prather
Sent: Tuesday, April 29, 2008 12:08 PM
To: [email protected]
<mailto:[email protected]>
Subject: [flexcoders] BlazeDS, List of VOs inside a VOs won't
translate
Hi all,
I'm having trouble with BlazeDS and a particular VO that lives
inside another VO. The parent VO translates just fine, but I can't cast
the ArrayCollection of VOs inside that for the LIFE of me.
Actually the smaller one is a List in Java, so I am trying to
cast it to ArrayCollection.
I get the error: (And I know it to be from the below
ArrayCollection/list:-)
TypeError: Error #1034: Type Coercion failed: cannot convert
[EMAIL PROTECTED] to mx.collections.ArrayCollection.
This occurs when I try and iterate through the list of
urlButtonVOs. I've tried casting it to an ArrayCollection with NO luck.
Charles Web Debugging proxy tags it as an "External Object" and
recognizes it's Java class name. Every other object is an Object in
Charles. What makes this one special? It's an AC of a custom Object,
which has a definition and RemoteClass tag on the Flex side to match.
On the Java side I have:
public class CatalogItemVOX implements Serializable {
......
protected List urlButtons;
.....
}
And urlButtons happens to be a List of a class called
UrlButtonVO. It won't translate to an ArrayCol
On the ActionScript side I have:
[RemoteClass(alias="com.plateausystems.elms.client.struts.learner.catalo
g.CatalogItemVOX")]
public class CatalogItemVOX {
...
public ArrayCollection urlButtons;
...
}
I'm TOTALLY stuck. The info shows up in Charles, but I can't get
it to be recognized as an AC of that object type. Here's where the
exception is thrown: (The for each) casting data.urlButtons to an AC
doesn't work either. BTW: It's inside an item renderer)
public function onCreationComplete(): void
{
var buttonID: int=0;
for each(var button: UrlButtonVO
in data.urlButtons) {
var newButton: URLButton=
new URLButton();
newButton.id=String("button"+String(buttonID));
newButton.label=
button.label;
newButton.URL= button.url;
newButton.addEventListener(MouseEvent.CLICK, buttonClickHandler);
this.addChildAt(newButton,
buttonID);
buttonID++;
}
}
Thanks in advance to anyone that can help!
______________________________
-Alan Prather
.
The information contained in this e-mail message is intended
only for the personal
and confidential use of the recipient(s) named above. This
message is privileged
and confidential. If the reader of this message is not the
intended recipient or an
agent responsible for delivering it to the intended recipient,
you are hereby notified
that you have received this document in error and that any
review, dissemination,
distribution, or copying of this message is strictly prohibited.
.
The information contained in this e-mail message is intended only for
the personal
and confidential use of the recipient(s) named above. This message is
privileged
and confidential. If the reader of this message is not the intended
recipient or an
agent responsible for delivering it to the intended recipient, you are
hereby notified
that you have received this document in error and that any review,
dissemination,
distribution, or copying of this message is strictly prohibited.
.
The information contained in this e-mail message is intended only for the
personal
and confidential use of the recipient(s) named above. This message is
privileged
and confidential. If the reader of this message is not the intended recipient
or an
agent responsible for delivering it to the intended recipient, you are hereby
notified
that you have received this document in error and that any review,
dissemination,
distribution, or copying of this message is strictly prohibited.