4. リクエストパラメータを取得する

リクエストパラメータの取得の仕方です。

Action

リクエストパラメータを受け取るにはActionにsetterを書きます。ついでにgetterも書いておきます。
命名的にはset+「リクエストパラメータの名前の先頭を大文字にしたもの」です。例えばリクエストパラメータがnameの場合はsetNameとなります。

package ww2.examples.event;
 
import com.opensymphony.xwork.ActionSupport;
 
public class ParameterAction extends ActionSupport {
    private String word;

    public String execute() throws Exception {
        System.out.println(word);
        return SUCCESS;
    }
 
    public String getWord() {
        return word;
    }
 
    public void setWord(String word) {
        this.word = word;
    }
}

xwork.xmlを変更

リクエストパラメータをActionにセットするのはinterceptorの役割ですので、xwork.xmlにその設定をします。
以下で設定しているdefaultStackはwebwork-2.1.7.jar内のwebwork-default.xmlに設定してあるもので、以下のinterceptorが順番に実行されます。

  • servlet-config:Servlet関連のオブジェクトをActionにセット(ActionでParameterAwareなどを実装している場合)
  • prepare:Actionのprepare()メソッドを呼ぶ
  • static-params:xwork.xmlで設定してあるパラメータをActionに設定
  • params:リクエストパラメータをActionに設定
  • conversionError:ActionContextのエラーメッセージをActionにセットする
<action name="parameter" class="ww2.examples.event.ParameterAction">
    <interceptor-ref name="defaultStack"/>
    <result name="success" type="dispatcher">
        <param name="location">/WEB-INF/vm/parameter.vm</param>
    </result>
</action>

parameter.vmを作成

parameter.vmではParameterActionのプロパティをそのまま使えます。

リクエストパラメータ:$word
<form action="parameter.action">
    <input type="text" name="word" />
    <input type="submit" value="実行" />
</form>

実行

http://サーバ名:ポート/アプリケーション名/parameter.action?word=xxxにアクセスすると標準出力にxxxが出力され、test.vmの出力結果にXXXが出ていればOK。

補足:日本語リクエストパラメータの受け取り

webwork.propertiesのwebwork.i18n.encodingがHttpRequest#setCharactorEncoding()で設定されるようで、日本語も受け取ることが出来ました。