[Seasar-user:4462] Re: 無設定S2Strutsの基本的な質問

Katsuhiko Nagashima [E-MAIL ADDRESS DELETED]
2006年 8月 31日 (木) 00:45:28 JST


永島です。

> [質問1]
> 通常Strutsを利用した場合の流れは下記のようになると思います。
>
> 1.ActionServlet
>> 2.Action
>> 3.JSP
>> 4.submit
>> 1.へ戻る・・・
>
> 無設定S2Strutsの基本的な流れは下記のような解釈でよろしいでしょうか?
>
> 1.JSP→initタグによってxxxInitAction(pojo)の初期化メソッド呼び出し(ポス
> トバックを考慮)
>> 2.submit
>> 3.ActionServlet
>> 4.Action(Pojo)
>> 1.へ戻る・・・
>

はい。
あと、通常Strutsの流れでも利用できますので、
やりやすいほうを選ぶのが良いと思います。

> [質問2]
> 質問1が仮に正しいとした場合、ActionServletから処理が開始されないため、
> Strutsのモジュール機能が利用できないような気がします。(カレントモジュー
> ルを決定できないため)
> 無設定S2StrutsはStrutsのモジュール機能は利用しない、といいますか、デフォ
> ルトモジュールのみ利用を想定しているのでしょうか?
> そもそもモジュール機能はstruts-configの肥大化の対処策なはずですので、無
> 設定S2Strutsには必要がない機能なのかもしれません。

無設定S2Strutsでは、デフォルトモジュールに自動登録していますので、
自動登録したいActionをモジュールごとに別けることはできません。

> [質問3]
> 質問1が仮に正しいとした場合、すべてのJSPを指し示すglobal-forwardが欲し
> くなってしまいます。
> あくまでも私の好みですので、一般的かどうかは解りません。(^-^;;
>
> たとえば
> 他の画面に遷移するためのアンカーが画面にある場合は<html:link
> forward="xxxx"/>を利用、
> Action(pojo)からの画面遷移もlocal-forward?ではなく、global-forward
> (redirect=true)を利用して移動など。
> 基本的にlocal-forward?はsuccessのみの利用となります。
>
> global-forwardを自動登録する方法やアイディアは何かありませんか?

現状では、
global-forwardはstruts-config.xmlに記述する必要があり、
自動登録する方法はありません。。。

> [質問4]
> 初期化処理用のxxxInitActionと、その他のイベント処理用のxxxActionに分ける
> 理由が良くわかりません。
> 動く、動かないでいえば、xxxActionにinitializeメソッドを作成しても動作す
> るように思えます。
>
> 初期化処理のみを別クラスにすると、クラス数が増えるので、チームでの受けが
> 悪くなる気がしているのです。
> 分けるのであれば、理由が欲しいのです。私都合でごめんなさい。m(__)m
>
> ひょっとしたらJSFを意識した何かがあるのでしょうか?
> (私はJSFは未経験なので良くわからないのです)
> それともUnitTest上のメリットなのでしょうか?

ご指摘の通り、初期化処理とイベント処理をいっしょにしても動くと思います。
分けていた理由は、、、わかりやすいからかな。。。
きちんとした理由で説明できなくすみません。

> [質問5]
> initタグから呼び出される初期化メソッドの中ではポストバックかどうかを判断
> する方法が必要だと思いますが、なんらか標準的な推奨テクニックはあるので
> しょうか?
>
> もしないのであれば、現在下記のようなアイディアを考えております。
> (質問1が仮に正しいとした場合のみ有効ですが・・)
>
> 1.画面遷移はJSPに対して、かつ、必ずredirect=trueで行う
>
> 2.*.doなど、ActionServletに対するリクエストには強制的にリクエストスコー
> プに"postback=true"を格納するフィルターを作成する(JSPにいく場合には何も
> しません)
>
> 3.xxxInitAction(pojo)に下記のようなコードを記述する
>
> public class XXXInitActionImpl implements XXXInitAction {
> private boolean postback = false;
>
> public void setPostback(boolean postback){
> this.postback = postback;
> }
> public boolean isPostback(){
> return postback;
> }
> public String initialize(){
> if(isPostback()){
> //2度目以降の処理
> }else{
> //初期化処理
> }
> return null;
> }
> }
>
> このアイディアでポストバック実装は問題ないでしょうか?

良いのではないでしょうか。

以上です。

-- 
Katsuhiko Nagashima



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