とりあえずやってミタ

とりあえず技術的っぽいことをいろいろやってみるブログ

SAStrutsでのパラメーターの注意点

      2015/02/11

SAStrutsを久々に触ってハマった箇所をざっくりとメモ



とりあえずおさらい

IndexActionクラス

SAStrutsではactionパッケージの下に
作成するアプリのURLに対応するようにサブパッケージを作り、
その中にAbstructActionクラスから派生させたIndexActionクラスを配置する

action/IndexAction.java # "/"に対応 page1/IndexAction.java # "/page1/"に対応 page2/IndexAction.java # "/page2/"に対応 page1/chapter1/IndexAction.java # "/page1/chapter1/"に対応

IndexActionクラスのメソッドは、
@Executeアノテーションを付記することでurlのサブディレクトリとなる。
ただしindex()のみは“/”でアクセス可能

メソッドを作る際の注意点

  • Executeアノテーションを付けること
  • publicで宣言
  • 返り値はString型

@Executeアノテーションの引数でurlPatternを指定するとアクセスする際のパラメータを指定できる


IndexFormについて

  • IndexFormクラスはformパッケージ配下に作成しておく
  • IndexFormクラスにはpublicなString型のメンバ変数”userId”を作成しておく



パラメーターの注意点

ここから今回の本題(昔悩んだのにすっかり失念していた)。

index()メソッドにパラメータを指定しないこと

上記ソースの例では、
“/”“/page1/”をURLとして設計している。
しかし/action/IndexActionクラスのindex()メソッドでは、
パラメータで“userId”を受け取るように指定されている。
このため“/page1/”にアクセスしても、
/action/IndexActionクラスのindex()メソッドで処理されてしまい、
/action/page1/IndexActionクラスへのリクエストは横取りされてしまう
よって意図した動きにはならない。

URLの設計を行なう時点でしっかりと頭に入れておかないと
実装時に気付いて慌てることになる(というか、なった)。

 - メモ , ,

  関連記事