[Seasar-user:20686] Re: [SAStruts] multipart/form での配列プロパティについて

Hiroshi Yamamoto [E-MAIL ADDRESS DELETED]
2011年 3月 24日 (木) 21:38:45 JST


山元です。
調査してみました。

現状、バリデーションでエラーになった時に、遷移先の画面データを初期化する
必要があるため、エラー画面遷移用のactionメソッドをフォワード先に指定しています。

このフォワードの際、multipart/form-dataでは、リクエストと、フォワードで、
作成されるパラメータ(S2RequestProcessor#getAllParameters)の内容が異なるようです。
(マルチパートでない場合は、リスエストとフォワードでパラメータの内容は同じだが、
 マルチパートの場合はフォワード時のパラメータが"SAStruts.method"のみ)

リスエスト時と、フォワード時で、それぞれActionForm#resetが呼ばれますが、
この時に、上記した問題があるため、リクエスト時は問題ないのですが、
フォワード時のresetで初期化された値が戻らずに、消失してしまうようです。


2011年3月24日18:23 Yasuo Higa <[E-MAIL ADDRESS DELETED]>:
> ひがです。
>
>> 山元と申します。
>>
>> multipart/form-dataのformで、バリデーションでエラーとなった場合に、
>> 遷移先の画面で、配列プロパティのみ値がなくなってしまうのですが、
>> 考えられる原因などありますでしょうか。
>>
>> バリデーションでエラーとならなかった場合は、actionで正しく値が取得できますし、
>> formをmultipart/form-dataではなくしエラーにした場合でも、画面で値が再現されます。
>>
> sa-struts-tutorialの画面にmultiboxを足して試してみましたが、
> 配列のプロパティはそのまま残ってましたよ。
>
>> <s:form action="/hoge/" method="post" enctype="multipart/form-data">
>>   <c:forEach items="${items}" var="item" varStatus="status">
>>     <input type="text" name="items[${status.index}]" value="${item}" />
>>   </c:forEach>
>> ...
>>
>> public class HogeForm implements Serializable {
>>   public String[] items;
>>   public void reset() {
>>     items = new String[5];
>>   }
>> ...
>>
>> 環境は下記の通りです。
>>
>> SAStruts 1.0.4-sp8
>> Seasar 2.4.43
>>
>> お手数をおかけしますが、よろしくお願いします。
>> _______________________________________________
>> Seasar-user mailing list
>> [E-MAIL ADDRESS DELETED]
>> https://ml.seasar.org/mailman/listinfo/seasar-user
>>
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
>


Seasar-user メーリングリストの案内