1.0.0-rc-2シリーズの最後に、s2flex2本体をリリースしました。
変更点は以下の通りです。
- FlexのArrayとJavaへのマッピングの改善しました。
- 上記に伴うAMFReaderの修正&リファクタリングをしました。
AMFReaderは配列の修正とExternalObject、ASObject、ClassTypedObjectについていくつか修正しています。
配列については、連想配列をAS3から渡された場合はS2Flex2では処理しないようになっています。
as3側でクラスを作成しないときには、Mapを利用することで、同様のデータを渡すことができると思います。
AS3でサーバに渡すクラスのプロパティでArrayを指定した時には
デフォルトでDefaultで、Object[]に変換します。
対応するJavaのクラスのプロパティがインターフェースの場合について、livedocsには
以下のようにありました。
List は ArrayList にマップされます。
SortedSet は TreeSet にマップされます。
Set は HashSet にマップされます。
Collection は ArrayList にマップされます。
上記に習って、Javaのクラスでプロパティの型がインターフェースの時にはそれぞれの推奨クラスに変換するようにしました。
as3で以下のように作成します。
package test{
public class MyDto {
public listArray:Array;
public sort:Array;
public hashset:Array;
public col:Array;
public setObj:Array;
}
}
対応するjavaクラスとして以下のように作成します。
public class MyDto {
private List listArray;
private SortedSet sort;
private Collection col;
private Set setObj;
}
そうするとそれぞれ対応するクラスとしては
listArray→ArrayList
sort→ArrayList
col→ArrayList
setObj→HashSet
というようになります。
AMF0のGatewayとしてs2flex2を使うときには、
これまで通りArray→ArrayListに変換することになります。
#s2flex2のサイトはrc-2になっていません。m(__)m
s2flex2
http://s2flex2.sandbox.seasar.org/ja/
#データ変換について参考にしました。
ActionScript から Java へのデータ変換
http://livedocs.macromedia.com/flex/2_jp/docs/00001103.html
Posted by nod at 2006年09月18日 00:37
| コメント (6)
| トラックバック (0)
| Clip!!
|
Clip!!
|
|
digg it!
|
del.icio.us it!
はじめまして。
楽しくS2Flex2をいじらせていただいているものです。
今、画面からJavaのプログラムへ値を渡すところではまってしまっています・・・
やりたいこと:
ActionScriptで定義したArrayをサーバーへ送信(AMF3で)
現象:
Arrayには自作クラス(DTOみたいなもの)が複数個格納されています。
送信寸前までは正しく保持していることが確認できていますが、
サーバー側で受信後(java.util.Listで受信)、オブジェクトの中を確認すると1件目だけ格納されており、
それ以降は全てnullになってしまっています。
1件ずつでは正常に渡せることは確認できているのですが、どうも可変長配列にするとうまくいきません。
配列に一件しか格納されていないのが解せないのですが、
何が原因と考えられるでしょうか・・・・
Posted by: pon at 2006年09月22日 18:54
ponさん。
はじめまして。
s2flex2いぢって、いただきありがとうございます。
ご質問の内容ですが
配列を渡すときにインデックスの数字が連続していないような形になっていないでしょうか?
ActionScriptの配列は、インデックスが数字の連続でなくても作成することができるのですが(数字以外でもできる)その場合は連想配列になります。
http://livedocs.macromedia.com/flex/2_jp/docs/00001103.html
にある、Array(疎)にあたるようなものです。
S2Flex2では、連想配列(Array(疎))には対応していません。
配列のときはインデックスが連続するときのみで
連想配列になるときにはあらかじめMapを利用していただくことになります。m(__)m
S2Flex2は、AMF3のデータ読み込み・書き込みは
FDS2とまったく同じにはなっておりません。
AS3のクラスとマッピングされているのがFDS2のjarファイルに含まれているものがあったりする為です。
そのためいくつか独自で変換している部分もあります。
JavaとAS3の変換やFDS2との違いはまだドキュメント化されていません。
必要なものと認識はしています。
今後作成するようにいたしますが、今しばらくお待ちください。m(__)m
長々書きましたが、違ったケースでしたら教えていただけますでしょうか。
現象を確認して対応策を考えますので。
どうぞよろしくお願いいたします。m(__)m
Posted by: nod at 2006年09月25日 02:21
事象を確認してみました。
まず行っていること:
1.S2DaoにてDB検索(DTOをListで返却)
2.FlexのDataGridとして表示(ListはDataProvider)
3.画面上で操作(DTOのプロパティを操作)
4.サーバー(Java側)に送信
そこでList(FlexではArray)の中身を確認したところ
4.の手前では全件格納を確認
・確認方法はObjectUtil.toString()で。
・Keyは数字、ValueはDTOが格納されている。
例)[8](クラス名)#9
属性A=hoge
属性B=moge
しかしJava側では1件しか取得できていません。
どうやら連想配列でないように見受けられます。
アドバイスのほうお願いいたします
Posted by: pon at 2006年09月28日 11:12
ponさん
遅くなりました。
現象の確認ありがとうございます。
いただいている例では、s2flex2のexampleにある
performanceやcheckのリスト一覧のようなイメージでしょうか。
その一覧のデータを修正して(3の項目)サーバに送信するとデータが一件になるということでしょうか..
このとき、3の画面操作はDataGrid中でデータ更新できる
属性(editable="true")になっていて、データを編集したのでしょうか。
わかる点がありましたらご連絡ください。
Posted by: nod at 2006年10月03日 04:22
こんにちは。ponです。
当方で確認しているものは
・performanceやcheckのリスト一覧のようなイメージです。
・その一覧のデータを修正して(3の項目)サーバに送信するとデータが一件になるということでしょうか
→そうなってしまいます。
・editable="true"で編集しています。
ダウンロードできるサンプルではListを表示させるものはあるのですがListを受信するものが無かったように思えます。
そこではまってしまった次第です・・・
Posted by: pon at 2006年10月03日 11:09
この記事に対するコメント