質問するログイン新規登録

質問編集履歴

1

コードの追加

2016/10/08 13:24

投稿

naomi3
naomi3

スコア1105

title CHANGED
File without changes
body CHANGED
@@ -2,9 +2,58 @@
2
2
  JSPの暗黙のオブジェクトexceptionをStruts2のプロパティとして扱えるようにする
3
3
  ###発生している問題・エラーメッセージ
4
4
  ・errorPage="exception.jsp"とisErrorPage="true"を使って、暗黙のオブジェクトexceptionを有効にし、エラーメッセージとスタックトレースを表示できました。
5
+ ```JSP
6
+ <p>エラーメッセージ</p>
7
+ <%= exception.getMessage() %>
8
+ <p>詳細</p>
9
+ <% for (StackTraceElement element : exception.getStackTrace()) { %>
10
+ <%= element.toString() %>
11
+ <% } %>
12
+ ```
13
+ ・ActionEventListenerを実装したクラスで、Actionでの例外を捕捉しHashMapで"exception"と名付けてValueStackにpushし、
14
+ ```Java
15
+ @Results({
16
+ @Result(name="exception", value="exception.jsp")
17
+ })
18
+ public class SampleAction extends ActionSupport {
5
19
 
20
+ public String execute() throws Exception {
6
- ・ActionEventListenerを実装したクラスで、Actionでの例外を捕捉しHashMapで"exception"と名付けてValueStackにpushし、例外表示JSPに遷移、Struts2カスタムタグを使ってエラーメッセージとスタックトレースを表示できました。
21
+ throw new Exception("意図的な例外");
22
+ }
23
+ }
7
24
 
25
+
26
+ public class SampleActionEventListener implements ActionEventListener {
27
+
28
+ @Override
29
+ public Object prepare(Object action, ValueStack stack) {
30
+
31
+ return action;
32
+ }
33
+
34
+ /*
35
+ * 例外発生時の制御。
36
+ */
37
+ @Override
38
+ public String handleException(Throwable thrown, ValueStack stack) {
39
+
40
+ HashMap<String, Throwable> namedThrown = new HashMap<String, Throwable>();
41
+ namedThrown.put("exception", thrown);
42
+ stack.push(namedThrown);
43
+
44
+ return "exception";
45
+ }
46
+ }
47
+ ```
48
+ 例外表示JSPに遷移、Struts2カスタムタグを使ってエラーメッセージとスタックトレースを表示できました。
49
+ ```JSP
50
+ <p>エラーメッセージ</p>
51
+ <s:property value="%{exception.message}" />
52
+ <p>詳細</p>
53
+ <s:iterator value="%{exception.stackTrace}">
54
+ <s:property value="%{toString()}" />
55
+ </s:iterator>
56
+ ```
8
57
  エラーメッセージとスタックトレースの表示のコードはいずれもわずか数行ですが、Struts2カスタムタグを使う方に統一したいと思っています。
9
58
 
10
59
  前者の場合も、<s:debug />で表示されるValueStackに"exception"もエラーメッセージも見えているのですが、findValue()の引数の指定が良くないのか、どうしてもexceptionを取得できません。