属性が無効なときに、JSTLをカスタムJSPタグに例外としてスローすることはできますか?

StackOverflow https://stackoverflow.com/questions/8845884

質問

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})}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top