ここでのあなたの目標は、開発者にカスタムタグの不適切な使用を通知することであると想定します。他の回答でほのめかされているように、JSPでエラーをスローすると、おそらく(構成によっては)ユーザーがアプリケーションエラーページに移動するため、ユーザー入力エラーを別の方法で処理する必要があります。
タグハンドラーをJavaでコーディングできる場合、仕様には、これを実行できるTLDのオプション要素がいくつか含まれています。
- 仕様は、
validator
を実装するクラスを取る要素を定義しますjavax.servlet.jsp.tagext.TagLibraryValidator
。実際には、これは多くの柔軟性を提供するため、使用するのがやや複雑です。
- 仕様
tei-class
は、を拡張するクラスを取るものも定義しますTagExtraInfo
。JavaDocが指摘しているように:
カスタムタグの追加のタグ情報。このクラスは、タグライブラリ記述子ファイル(TLD)で言及されています。このクラスを使用する必要があります。
- タグがスクリプト変数を定義している場合
- タグがタグ属性の変換時検証を提供する場合。
JSPのバージョンによっては、開発者が提供する変数の検証を処理するためのオーバーライドisValid()
またはメソッドが必要になります。validate()
Apache taglibは、タグの一部を検証するためにこれらを使用します:(https://github.com/javaee/jstl-api/blob/master/impl/src/main/java/org/apache/taglibs/standard/tei/ImportTEI .java)
public boolean isValid(TagData us) {
if (Util.isSpecified(us, VAR) && Util.isSpecified(us, VAR_READER))
return false;
return true;
}
または、JSP 2.0を使用している場合はvalidate
、の配列を返すことができるため、実装は少し複雑になりますValidationMessage
。Glassfishには例があります:( https://github.com/javaee/glassfish/blob/master/appserver/tests/appserv-tests/devtests/web/jspGetTagLibraryInfos/servlet/taglib/MyTagExtraInfo.java)
public ValidationMessage[] validate(TagData data) {
ValidationMessage[] vms = null;
TagLibraryInfo[] infos =
getTagInfo().getTagLibrary().getTagLibraryInfos();
if (infos.length != 1) {
vms = new ValidationMessage[1];
vms[0] = new ValidationMessage(null, "Wrong number of tsglibs");
}
return vms;
}