質問: "loadPage_load" ) } ) @SkipValidation @Action("loadPage_load") public String load() { System.out.println(getActionErrors());・・・(1) return "load"; } @Override public void validate() { addActionError("エラーがあります。"); System.out.println(getActionErrors());・・・(2) } ``` validate()でエラーが発生すると、chainで、load()に遷移しています。 (2)「エラーがあります。」 (1)「[]」 と表示されます。 validate()とload()は、同じクラスです。 addActionErrorの内容は、action間で値の受け渡しは、できないのでしょうか? 初歩的な質問ですが、ご返答よろしくお願いします。
回答: ActionChain(result=chainのこと)すると、Actionに入れてある情報はいったんリセットされますが、ただし実は **ValueStack だけは維持** されます。 ValueStackに退避しておけば保持されるのが仕様ですが、実際は特にドキュメントに公開されているわけではなく、隠し仕様の1つです。 コードを拝見して気になったのですが、validate()メソッドを実装した上で、@SkipValidationを適用しているActionのメソッドを呼んでいるところです。 @SkipValidationはvalidationを一切実行しないことを示すものなので、これは本来不可能な動きをしており、validate()とActionメソッドは同一Action内で実行されます。 (ただし実際には実行できてしまう方法もありますが。。これもおそらくその一例なのでしょう) もしAction実行後に別のメソッドを実行したい場合は、Struts2-Conventionプラグイン中にある`@After`があります。 ``` @After public void afterActionMethod() { // メソッド名は任意。 // スローする例外に合わせてExceptionMappingを記載しておくと、Exceptionによる制御もできる。 } ```