###前提・実現したいこと
JSPの暗黙のオブジェクトexceptionをStruts2のプロパティとして扱えるようにする
###発生している問題・エラーメッセージ
・errorPage="exception.jsp"とisErrorPage="true"を使って、暗黙のオブジェクトexceptionを有効にし、エラーメッセージとスタックトレースを表示できました。
JSP
1<p>エラーメッセージ</p> 2<%= exception.getMessage() %> 3<p>詳細</p> 4<% for (StackTraceElement element : exception.getStackTrace()) { %> 5 <%= element.toString() %> 6<% } %>
・ActionEventListenerを実装したクラスで、Actionでの例外を捕捉しHashMapで"exception"と名付けてValueStackにpushし、
Java
1@Results({ 2 @Result(name="exception", value="exception.jsp") 3}) 4public class SampleAction extends ActionSupport { 5 6 public String execute() throws Exception { 7 throw new Exception("意図的な例外"); 8 } 9} 10 11 12public class SampleActionEventListener implements ActionEventListener { 13 14 @Override 15 public Object prepare(Object action, ValueStack stack) { 16 17 return action; 18 } 19 20 /* 21 * 例外発生時の制御。 22 */ 23 @Override 24 public String handleException(Throwable thrown, ValueStack stack) { 25 26 HashMap<String, Throwable> namedThrown = new HashMap<String, Throwable>(); 27 namedThrown.put("exception", thrown); 28 stack.push(namedThrown); 29 30 return "exception"; 31 } 32}
例外表示JSPに遷移、Struts2カスタムタグを使ってエラーメッセージとスタックトレースを表示できました。
JSP
1<p>エラーメッセージ</p> 2<s:property value="%{exception.message}" /> 3<p>詳細</p> 4<s:iterator value="%{exception.stackTrace}"> 5 <s:property value="%{toString()}" /> 6</s:iterator>
エラーメッセージとスタックトレースの表示のコードはいずれもわずか数行ですが、Struts2カスタムタグを使う方に統一したいと思っています。
前者の場合も、<s:debug />で表示されるValueStackに"exception"もエラーメッセージも見えているのですが、findValue()の引数の指定が良くないのか、どうしてもexceptionを取得できません。
どうすればよいのかご教示ください。
できない場合は、逆に、後者の方を前者の方に統一する、すなわち、Actionでの例外をJSPの暗黙のオブジェクトexceptionとして扱うにはどうすればよいでしょうか。
どうか宜しくお願いいたします。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。