0

この状況に対処する方法と、これに対する推奨事項を知りたいです。

JSP でヌル ポインター例外が発生しています。

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

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

したがって、コントローラーでは次のようになります。

    ...
   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() が失敗しているため、変数 json は決して埋められません。したがって、これは例外をスローしています。そして、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 であり、空であるため、これにより Null 文字列を送信する問題が解決されます。

ここで取得している例外は、 javax.xml.ws.webserviceexception could not send message です (コントローラーでこれを処理するより良い方法を知っていますか?)

念のため、jsp側でもこれを行いました。

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

したがって、私が残るかもしれない唯一の疑問は、コントローラーで javax.xml.ws.webserviceexception を処理するより良い方法を知っていますか?

再度、感謝します

4

2 に答える 2

1

RuntimeExceptions like NullPointerExceptions は通常、コード内のプログラマーのエラーを示します。つまり、バグです。それらをキャッチするべきではありませんが、適切に事前チェックして回避してください。あなたの特定のケースでは、別の でラップするのを間違えましたnew String()。属性が の場合null、それがスローNullPointerExceptionされます。それを削除します。

例えば

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

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

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

} catch (Exception e) { // Please be more specific.
    throw new ServletException("Converting to CSV failed", e);
}
于 2012-04-24T23:30:53.367 に答える
1

csvStringの代わりに空の値で初期化することをお勧めしますnull。したがって、常にjspに移動します。有効な値がある場合はレンダリングし、そうでない場合はビューに空で表示されます。

また、jsp でスクリプトレット コードを使用しないでください。維持できません。

于 2012-04-24T23:31:57.433 に答える