resultで別のactionを呼び出す(chain)
chainはいまのAction情報を次のAction側に引き継いで利用できる。
注意すべきことはブラウザのURLは最初のActionのURLとなる。
<result name="success" type="chain">TestAction</result> <!-- chainの遷移先を定義しておくこと --> <action name="TestAction" class="sample.TestAction" method="execute"> <result name="success">/jsp/HelloWorld.jsp</result> </action>
遷移元actionの値の使用方法
public String execute() { //方法1:ValueStackを使用する ActionContext actionCtx= ActionContext.getContext(); ValueStack valueStack = actionCtx.getValueStack(); Object value = valueStack.findValue("name"); //方法2:Getterを使用する //※Setterを用意しておくと自動でセットしてくれる String tmp = getName(); return SUCCESS; } private String name; public String getName() { return name; } public void setName(String name) { this.name = name; }
パラメータを使用
・*以降の値を{x}として使える
・*は複数使用可能
例){1}はinitとして扱える
jsp
<s:form action="hello_init">
<action name="hello_*" class="sample.HelloWorldAction" method="{1}"> <result name="success">/jsp/HelloWorld.jsp</result> </action>
action
public String init() { return SUCCESS; }
※Struts2.5以降の場合以下の方法を行わなければエラーになる
方法1:packageにstrict-method-invocation="false"を記載する
<package name="default" extends="struts-default" strict-method-invocation="false">
方法2:allowed-methodsを記載する(アクションごと)
・使用するメソッド名を記載
・カンマ区切りで複数指定可能
<action name="hello_*" class="sample.HelloWorldAction" method="{1}"> <result name="success">/jsp/HelloWorld.jsp</result> <allowed-methods>init,show</allowed-methods> </action>
方法3:global-allowed-methodsを記載する(パッケージごと)
<package name="default" extends="struts-default"> <global-allowed-methods>init,show</global-allowed-methods>