0

xpages のカスタム エラー ページを生成しようとしています。私は多くの解決策をグーグルで検索しましたが、これまでのところ、エラーが発生したことを示すエラーページが表示されます。

しかし、正確に何が起こったのかを知ることができません (この場合、エラーは「ドキュメント」を保存する必要があるということですが、エラーを取得するためだけに変数に「ドキュメント」という名前を付けました)。

私がすることはすべて:

var errObj = requestScope.error; 
output = errObj.getCause().getErrorPropertyId();
output = errObj.getCause().getComponentId();

getExpressionText() を呼び出そうとするとすぐに、エラー 500 が発生します。

エラーが発生した場所 (行番号) とエラーの原因となった変数に関する情報を取得するにはどうすればよいですか? - 標準エラー ページを使用するのと同じように。

4

3 に答える 3

1

Tony McGuckinによるこのXSnippetをご覧ください:http://openntf.org/XSnippets.nsf/snippet.xsp?id=custom-error-page-cw-cause-and-stacktrace- information。エラーの詳細を出力するために以下を使用します。

  var output = requestScope.error.toString()+"\n\n";
  if(requestScope.error instanceof com.ibm.xsp.exception.XSPExceptionInfo){
    var codeSnippet = requestScope.error.getErrorText(); 
    var control = requestScope.error.getErrorComponentId();
    var cause = requestScope.error.getCause();
    output += "In the control : " + control + "\n\n";
    if(cause instanceof com.ibm.jscript.InterpretException){
      var errorLine = cause.getErrorLine();
      var errorColumn = cause.getErrorCol();
      output += "At line " + errorLine;
      output += ", column " + errorColumn + " of:\n";
    }else{
      output += "In the script:\n";
    }
    output += codeSnippet;
  }
  return output;
于 2013-03-20T14:45:57.110 に答える
1

エラー行と詳細は、requestScope.error から簡単にアクセスできません。Mark Leusink の Debug Toolbar の最新リリースのソース コードを見ると、彼がスタック トレースを解析して詳細を取得していることがわかります。

ただし、SSJS 例外 (getErrorLine() を使用して com.ibm.jscript.InterpretException) の基礎となる Java クラスを使用して、すべての関連情報にアクセスできます。getLocalizedMessage() メソッドは、通常「スクリプト インタープリター エラー」を開始するエラーの詳細を取得します。getExpressionText() メソッドは、エラーをスローした行を取得します。

私が OpenNTF に置いた XPages OpenLog Logger プロジェクトを見ると、それは私が OpenLog に完全な詳細を記録するために使用しているものです。http://www.openntf.org/Internal/home.nsf/project.xsp?action=openDocument&name=XPages%20OpenLog%20Logger

これらのメソッドを使用する OpenLogPhaseListener のソース コードは、https ://github.com/paulswithers/openlogjava/blob/master/OpenLogJava/WebContent/WEB-INF/src/com/paulwithers/openLog/OpenLogPhaseListener.java で確認できます。

あなたが Java の専門家でなくても、SSJS を使用すれば重要な部分は理解できるはずです。行 84 は、XPages がデフォルトのエラー ページにルーティングするときに、キャッチされなかった例外をキャプチャします。それは私が言及した方法を使用します。

98 行目から 105 行目は、catch ブロックを使用するだけの場合にすべての詳細をログに記録する行OpenLogBean.addError(e, this)です。Java コードの error.getError() は、そのエラー オブジェクトを取得します。SSJS で先行入力を取得するには、使用する必要があると思います。ethiscatch(e:com.ibm.jscript.InterpretException)

私はこれをテストしていません。OpenNTF のプロジェクトに使用したものから戻ってきました。

于 2013-03-26T23:36:14.853 に答える
0

今のところ、Debug ToolbarOpenLog Databaseを使用してこの問題に対処しました。

エラーが発生した場合、ユーザーはカスタム エラー ページ (デバッグ ツールバーの例を使用) だけを取得し、何か問題が発生したことを示します。そのため、彼は他の問題やスタック トレースでさえ気にする必要はありません。しかし、エラー ページが表示されると同時に、必要なすべての情報 (行、正確なエラー メッセージなど) と共にエラーがログ データベースに記録されます。

また、「この問題を報告する」リンク ボタンを実装して、ユーザーが現在参加しているセッションに関する重要な情報を含む新しい電子メールを作成しました。

于 2013-03-26T12:27:21.770 に答える