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

Yasuo Higa [E-MAIL ADDRESS DELETED]
2011年 3月 29日 (火) 13:23:01 JST


ひがです。

> 山元です。
> 調査してみました。
> 
> 現状、バリデーションでエラーになった時に、遷移先の画面データを初期化する
> 必要があるため、エラー画面遷移用のactionメソッドをフォワード先に指定しています。
> 
> このフォワードの際、multipart/form-dataでは、リクエストと、フォワードで、
> 作成されるパラメータ(S2RequestProcessor#getAllParameters)の内容が異なるようです。
> (マルチパートでない場合は、リスエストとフォワードでパラメータの内容は同じだが、
>  マルチパートの場合はフォワード時のパラメータが"SAStruts.method"のみ)
> 
遷移先にアクションを指定している場合は、そうなります。

アクションを経由しないようにするか、
フォームをセッションに置かないようにするかですね。
フォームをセッションに置かないなら、resetメソッドは不要です。

> リスエスト時と、フォワード時で、それぞれ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 メーリングリストの案内