2012-04-24 19 views
0

私はこの状況をどのように処理するのか知りたいと思っています。JSPで例外をキャッチ

私のJSPでnullポインタ例外が発生しています。

String csvDataIn = new String ((String)request.getAttribute("csvString")); 

これは、DBへのクエリを処理してcsvStringを取得するために、私は春にコントローラを作成したからです。私が失敗したクエリを作成するまでは、すべて正常に動作しています。

ので、コントローラで:だから変数JSONはそれを埋めるではありません

... 
    JsonNode json = dataRepository.getDataAsJson(dataNode); 
    csvString = getCSVfromJsonNode(json); 
       model.addAttribute("csvString", csvString); 
      } catch (Exception e) { 
       Logger.log("CSV controller failed", _moduleClass, e); 
      } 
      return "exportCSV"; 
     } 

、関数getDataAsJson()が失敗しているので。これは例外をスローしています。そしてexportCSV.jspに戻りますが、モデルのcsvString属性は返されません。

したがって、jspに戻ると、nullpointer例外がスローされます。

私の質問は次のとおりです。 a-どのようにJSPでこの例外をキャッチしますか? b- JSPで例外をキャッチするよりも優れたソリューションがあると思いますか?私はこれのためのベストプラクティスであるかもしれないことを意味します。

ありがとうございます。

ありがとうございます。彼らは本当に良い助けです:私は問題を処理するために次の変更を加えました。

... 
     JsonNode json = dataRepository.getDataAsJson(dataNode); 
     model.addAttribute("csvString", csvString); 
     } catch (Exception e) { 
     Logger.log("CSV controller failed", _moduleClass, e); 
     } 
     return "exportCSV"; 
     csvString = getCSVfromJsonNode(json); 
     } 

これは、csvStringが前に作成されたBeanであるため空文字列を送信する問題を解決します。

私はここで取得しています例外はjavax.xml.ws.webserviceexceptionがメッセージを送信できませんでしたです(あなたがコントローラでこれを処理するためのより良い方法を知っていますか?)

私もJSPでこれをやりました側は、念のために:

String csvDataIn = (String)request.getAttribute("csvString"); 
//This should never happen, but we check anyway. 
if (csvDataIn != null){ 
... 
} 

だから私は残ることが唯一の疑いがある:あなたは、コントローラでjavax.xml.ws.webserviceexceptionを処理するためのより良い方法を知っていますか?

THANKSはAGAIN NullPointerExceptionのような

+0

あなたが言っているような例外処理がコントローラに属しています。 – Marvo

答えて

1

RuntimeException sが通常のコードでプログラマのエラーを示しています。私。それはバグです。あなたはそれらを捉えてはいけませんが、正しくチェックすることでそれらを避けるべきです。あなたの特定のケースでは、別のnew String()でそれを囲む間違いをしました。属性がnullの場合は、NullPointerExceptionが返されます。それを取り除く。

など。

String csvDataIn = (String) request.getAttribute("csvString"); 

if (csvDataIn != null) { 
    // Do your job here. 
} 
else { 
    // Just ignore it? 
} 

結局のところ、ビジネスロジックは実際にはJSPに属していません。コントローラーでこのジョブを実行して、JSPに正確ににHTMLをいくつかのHTMLを飾るために必要なデータを与える必要があります。コントローラーで本当に回復不能な例外が発生した場合は、ServletExceptionとして再スローします。コンテナのデフォルトのエラーページ、または<error-page>として指定したページがweb.xmlになります。あなたの代わりにnullの空の値でcsvStringを初期化

} catch (Exception e) { // Please be more specific. 
    throw new ServletException("Converting to CSV failed", e); 
} 
+0

コントローラに入っているという例外は "javax.xml.ws.webserviceexceptionがメッセージを送信できませんでした"ですが、これを処理するにはより良い方法がありますか?あなたは余分な検証をすることをお勧めしますか? (私が以前に言ったように、これは、例外をより良い方法で処理する方法を学びたいからです。)回答への感謝 – Juano7894

+0

これは重大な例外です。これは、Webサービスリクエストに問題があることを示しています。または外部のWebサービスサーバ自体と通信することができます。これまでは、例外をコンテナまでずらして、エラーページで終わるようにする必要がありました。特定の例外の**原因**を修正する方法は、離れて物語です。私は、WebサービスAPIのドキュメントを読むか、Webサービスのサポートチームに連絡して、特定の例外の原因を解決する方法を説明します。 – BalusC

+0

ありがとう、私はいくつかの変更を加えました。私はコントローラで処理を行い、リポジトリに追加しました。だから今はリポジトリで失敗するだろう。もう一つの疑念と私はあなたをもう気にしません..あなたは "あなたは例外をすべての方法でコンテナに行くようにする必要があります"と言うときは、例外はJSPに行く必要がありますし、ページ? – Juano7894

1

良いです。だから、いつもjspに行きます。有効な値があればレンダリングし、それ以外の場合はビューに空を表示します。

jspでスクリプトレットコードを使用しないようにしてください。それは維持できません。