result要素の属性には、以下の値が設定できる
name: マッピング名。省略した場合は"success"になる
type: Actionクラスの処理終了後に呼ばれるタイプ。省略した場合は"dispatcher"になる

tpyeに設定できる値としてデフォルトでは以下のものが設定できる

Type説明
chain他のActionクラスを呼び出す
dispatcherviewにjspを使う
freemarkerviewにfreemarkerを使う
httpheaderHTMLのヘッダーのみ返す
redirect他のURLへリダイレクトする
redirectAction他のActionクラスへリダイレクトする
streamファイルのダウンロードで使用
velocityviewにvelocityを使う
xsltviewにxsltを使う
plainTextviewにplainTextを使う


上記の値はstruts-default.xml内のresult-typeに定義されている

サンプルを使って説明

<package name="example" namespace="/hogehoge" extends="struts-default">
<action name="Foo" class="example.Foo">
<result>/example/Foo1.jsp</result>
<result name="input">/example/Foo2.jsp</result>
</action>
<package/>
  • example.Fooクラスが"success"を返すと/example/Foo1.jspが呼ばれる。
  • example.Fooクラスが"input"を返すと/example/Foo2.jspが呼ばれる。


struts-default.xml内に定義してあるもので要件を満たせなければ、com.opensymphony.xwork2.Resultインターフェース、もしくはそれらの子クラスを継承する形で自分で作れば良い。作ったものはstruts-default.xmlで記載してあるように<result-types>タグでくくって宣言すれば使えるようになる


<package name="example" namespace="/hogehoge" extends="struts-default">
<result-types>
<result-type name="freemarker2" class="example.FreemarkerResult2" />
</result-types>

<action name="Foo" class="example.Foo">
<result type="freemarker2">/example/Foo.ftl</result>
</action>
<package/>

0 コメント: