単純な JSP (追加のフレームワークなし) を使用している場合は、独自のカスタム JSP タグを作成することをお勧めします。field
タグとタグmessage
。多くのフレームワークがそのようなものを提供しているため、これが唯一の要件である場合は、試してみることができます。
独自のタグを作成する方法についての Sun のチュートリアルがあります。少し古いですが、内部はそれほど変わっていません。さらに、標準の一部であるため、どのサーブレット コンテナーでも機能します。
簡単なタグを作成するために必要な手がかりを提供します。必要に応じmessage
て独自のタグを作成できるとfield
思います。
基本的な考え方
TagSupport
抽象クラスを拡張する基本クラスの作成を開始し、doEndTag()
メソッドをオーバーライドします。message
現在の pageContext に属性があるかどうかを確認し、存在する場合は、タグの出力ストリームを介してそのエラー メッセージを出力します。
public class MessageTag extends TagSupport {
public int doEndTag() {
String message = pageContext.findAttribute("message");
if (message != null) {
StringBuilder output = new StringBuilder();
output.append("<small class=\"error\">").append(message).append("</small>");
JspWriter out = pageContext.getOut();
out.println(output.toString());
}
return EVAL_PAGE;
}
}
次に、前のチュートリアルの手順に従って、Web アプリケーションでタグ ライブラリを定義し、それを JSP で使用します。
<label>Field name</label>
<input type="text" name="field-name">
<mytags:message />
現実の世界
それが最も簡単な方法でしょう。しかし、実際のシナリオでは、検証しているフィールドに応じて異なるエラー メッセージを表示したいので、属性name
(または同様のもの) をタグ クラスに追加し、それに応じて異なるメッセージを検索できるようにします。その属性の値:
public class MessageTag extends TagSupport {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void release() {
super.release();
name = null;
}
public int doEndTag() {
String lookupAttr = (name != null ? name : "message");
String message = pageContext.findAttribute(lookupAttr);
if (message != null) {
StringBuilder output = new StringBuilder();
output.append("<small class=\"error\">").append(message).append("</small>");
JspWriter out = pageContext.getOut();
out.println(output.toString());
}
return EVAL_PAGE;
}
}
そうすれば、特定のフィールドごとにタグを再利用できます。
<label>Field name</label>
<input type="text" name="field-name">
<mytags:message name="field-name" />
タグ ライブラリにも属性定義を追加する必要があることに注意してください。
明らかに、これを必要に応じて複雑にすることができます (つまりstyle
、INFO、WARNING、または ERROR メッセージなどを表示できるようにする属性を追加します)。