忍者ブログ
雇われるだけの人生から目指せ独立、社会人2年目なゲーム脳SEのブログ。更新頻度=週2~3回。
[251]  [250]  [249]  [248]  [247]  [246]  [245]  [243]  [242]  [241]  [240
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

いまどきStruts(笑)とか音速が遅すぎますが、Strutsの内部的な動作って意外なほど知られてません。
それとも私がそんな「知られていない程度の職場」にしか行ったことがないんでしょうか?おかしいな、結構どころじゃなく有名なんだけどな、今入ってる会社・・・
閑話休題。というわけで、近頃見つけたStrutsのtipsをいくつかまとめてみました。

○HTTPRequestの内容からrequestスコープのActionFormが生成される手順について
www.fireproject.jp/feature/struts/advanced/action_to_action.html
こちらのサイトが非常に詳しいです。
ポイントは「フォワード前のexecuteでHTTP要求のパラメータにあったActionFormのフィールドを上書きしても,フォワード後のexecuteまでに再びHTTP要求のパラメータで上書きされてしまう.」というところでしょうか。

よくあるんですよね。入力されてきたActionFormの値をActionで書き換えてJSPにフォワード。でも何故かJSPで書き換えた値を出力すると書き換えられていない。原因が分からない。分からないから別の名前で書き換えたActionFormをsetAttributeしちゃえーみたいな。でも実際それが一番の解決法だったりする。


○Struts ActionForm reset()メソッドとActionForm中のBeanについて
例ではよくcheckboxの状態をリセットするために使えと書いてますが、ActionFormにBeanを内包した場合にも併用が必須です。
public void reset(ActionMapping mapping, HttpServletRequest request) {
    //HTTPリクエストからパラメータ値を読み取って
    //本ActionFormに設定する前に必ず呼ばれる
    //ここでabesiBeanのオブジェクトを生成する
    super.reset(mapping, request);
    this.abesiBean= new AbesiBean();
}
このBeanをnewする処理を怠ると、

サーブレットが"abesiBean.name=abesi"のようなカンマで区切られたパラメータ付きのPOSTを受け取る

Action.doPost()が実行される

populate()・・・HTTPリクエストパラメータからActionFormを生成しようとする

"abesiBean.name"のようにHTTPリクエストで指定されているので、BeanUtilがカンマ処理を解決しようとする

でもabesiBeanはnullです、BeanUtil.populate()にnullを指定するとエラーになります

というわけでエラー(しかも一見して何が原因か分かりづらいエラー)
 
というオチになります。1.2.6での話なので、1.3ぐらいなら直っているかもしれません。
このオチだけならデバッグして本人が解決してくれればいいんですが、このエラーを一目見て原因不明と判断してActionFormにはBeanを入れてはいけませんみたいなルールを勝手に作って意味不明な実装をしている箇所が何カ所かあって、ずいぶんと絶望させられました。ひでえ。


フレームワークに乗せられているだけでは、決して良いプログラムにはならないのですね。
PR
この記事にコメントする
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
この記事へのトラックバック
この記事にトラックバックする:
カレンダー
02 2024/03 04
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
ブログ内検索
最新コメント
[11/13 DSLR-A850]
[08/29 逆援助交際]
[08/23 クンニ]
[08/22 熟女]
[08/19 痴漢]
はてなブックマーク
プロフィール
HN:
akisute
性別:
男性
職業:
システムエンジニア
趣味:
ゲーム・東方・ニコ動。あと散歩。
バーコード
推奨環境

横幅900px以上、Firefox 3, Safari 3, Opera 9.5, Chrome 0.2以上。IE7ギリギリ対応。IE6未対応。

忍者ブログ [PR]