属性が無効なときに、JSTLをカスタムJSPタグに例外としてスローすることはできますか?
-
27-10-2019 - |
質問
JSPタグを作成しています。タイプパラメーターをタグに渡します。
コードは次のようになります:
<%@ attribute name="type" require="true" %>
<c:choose>
<c:when test="${type eq 'even'}">
<c:set var="remainder" value="0" />
</c:when>
<c:when test="${type eq 'odd'}">
<c:set var="remainder" value="1" />
</c:when>
<c:otherwise>
<%-- Want to throw exception!! --%>
</c:otherwise>
</c:choose>
間違った値を渡す場合、例外を投げたいです。この主題について検索したとき、私はちょうど見つけました これ. 。 JSTLで通常の例外を投げることはできませんか?
解決
すぐに問題に気付くだけです
誰が「気づく」のでしょうか?その例外はコンテナによってのみキャッチでき、「500内部サーバーエラー」ページ(または定義するカスタムエラーページ)になります。
それが本当に欲しいものである場合、「new Whationexception()」を実行するだけのカスタムタグを定義し、次のようなカスタムタグリブを利用することができます。 <mytaglib:reportError/>
, 、標準のコアタリアブは、例外を投げることを考慮していなかったため、誰にとっても望ましいでしょう。
他のヒント
私は復活して編集することにしました 削除された答え 部分的に正しいように見えました。
SOのようなスクリプトレットに追加することで、例外をスローできます。
<c:choose> <c:when test="${type eq 'even'}"> <c:set var="remainder" value="0" /> </c:when> <c:when test="${type eq 'odd'}"> <c:set var="remainder" value="1" /> </c:when> <c:otherwise> <% if (true) throw new Exception("Wrong type"); %> </c:otherwise> </c:choose>
ただし、JSPは「ビュー」レイヤーの一部であることになっているため、サーブレットにロジック(例外を投げることを含む)を実際に維持してみてください。
注意してください if (true)
声明。例外スクリプトレットをコードにドロップするだけで、コンパイラが「到達不可能なコード」について不平を言うため、これはトリックです。
例外を体系的にスローするカスタムEL関数またはタグを使用するか、エラーメッセージを使用して大きな赤いDivを表示するか、その両方
${myFn:illegalState("the type must be odd or even but it is " ${type})}
所属していません StackOverflow