【Struts2】struts.xml

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">

struts.xml

<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>