|
|
| |
WebLogic JSP フォーム検証タグの使い方
以下の節では、WebLogic JSP フォーム検証タグの使い方について説明します。
WebLogic JSP フォーム検証タグの概要
WebLogic JSP フォーム検証タグは、JSP ページによって生成される HTML フォームのテキスト フィールドにユーザが入力するエントリを検証するための便利な方法を提供します。WebLogic JSP フォーム検証タグを使用すると、よく使用される検証ロジックを繰り返しコーディングする必要がなくなります。検証は、WebLogic Server 配布キットに含まれている複数のカスタム JSP タグによって行われます。JSP フォーム検証タグの機能は次のとおりです。
Required
Field
Validator
クラス)。
Regular Expression Validator
クラス)。
Compare Validator
クラス)。
Custom Validator
クラス)。
WebLogic JSP フォーム検証タグには、以下のものがあります。
検証タグによってフィールド内のデータが正しく入力されていないことが判明した場合、そのページが再表示され、再入力が必要なフィールドがテキストまたは画像で示され、エンド ユーザに注意が促されます。フォームに正しく入力されると、エンド ユーザのブラウザには検証タグで指定された新しいページが表示されます。
検証タグ属性のリファレンス
この節では、WebLogic フォーム検証タグとその属性について説明します。タグを表すために使用されるプレフィックスは、JSP ページの taglib
ディレクティブで定義できます。このマニュアルでは、理解しやすいように wl
というプレフィックスを使用して WebLogic フォーム検証タグを表します。
<wl:summary>
<wl:summary>
は、検証用の親タグです。<wl:summary>
の開始タグは、JSP 内のすべての要素または HTML コードの前に置きます。終了タグの </wl:summary>
は、終了タグ </wl:form>
の後ろの任意の場所に置きます。
name
<wl:validator>
タグによって生成されるすべての検証エラー メッセージを保持するベクトル変数の名前です。この属性を定義しなかった場合、デフォルトの errorVector
が使用されます。エラー メッセージのテキストは、<wl:validator>
タグの errorMessage
属性で定義されます。
このベクトル内の値を表示するには、<wl:errors/>
タグを使用します。<wl:errors/>
タグを使用するには、エラー出力を表示するページ上の場所にこのタグを配置します。次に例を示します。
<wl:errors color="red"/>
代わりに、スクリプトレットを使用することもできます。次に例を示します。
<% if (
errorVector
.size() > 0) {
for (int i=0; i < errorVector
.size(); i++) {
out.println((String)errorVector
.elementAt(i));
out.println("<br>");
}
} %>
ここで errorVector
は、<wl:summary>
タグの name
属性で割り当てられたベクトルの名前です。
name
属性は、1 つのページで複数のフォームを使用するときに必要となります。
headerText
<% if(
summary
.size() >0 ) {
out.println(headerText);
}
%>
ここで summary
は、<wl:summary>
タグの name
属性で割り当てられたベクトルの名前です。
redirectPage
<wl:form>
タグの action
属性で URL を指定する場合は必要ありません。
注意 : redirectPage
属性を、<wl:summary>
タグが配置されているページに設定しないでください。無限ループとなって StackOverFlow
例外が発生します。
<wl:form>
<wl:form>
タグは HTML <form>
タグとほぼ同じで、WebLogic JSP フォーム検証タグを使って検証できる HTML フォームを定義します。name
属性を使用して各フォームを一意に識別することによって、単一の JSP で複数のフォームを定義できます。
method
GET
または POST
を入力します。この機能は、HTML <form>
タグの method
属性とまったく同じです。
action
<wl:summary>
タグの redirectPage
属性の値に優先します。この属性は、単一の JSP ページに複数のフォームを定義する場合に便利です。
注意 : action
属性を、<wl:form>
タグが配置されているページに設定しないでください。無限ループとなって StackOverFlow
例外が発生します。
name
<form>
タグの name
属性とまったく同じです。同じページで複数のフォームが使用される場合にフォームを識別します。また、name
属性はフォームへの JavaScript 参照にも便利です。
<wl:validator>
フォーム フィールドごとに、1 つまたは複数の <wl:validator>
タグを使用します。たとえば、入力を正規表現と照らし合わせて検証し、フィールドに何かが入力されている必要がある場合、2 つの <wl:validator>
タグを使用します。1 つは RequiredFieldValidator
クラスを使用し、もう 1 つは RegExpValidator
クラスを使用します(これらのバリデータを両方使用する必要があります。これは、空白の値は RequiredFieldValidator によって値として評価されるからです)。
errorMessage
<wl:summary>
タグの name
属性によって定義されるベクトル変数に格納される文字列です。
expression
RegExpValidator
クラスを使用すると、正規表現が評価されるようになります。
RegExpValidator
を使用しない場合、この属性は無視できます。
fieldToValidate
<input>
タグの name
属性で定義されます。
validatorClass
使用できる検証クラスは以下のとおりです。
weblogicx.jsp.tags.validators.RequiredFieldValidator
weblogicx.jsp.tags.validators.RegExpValidator
weblogicx.jsp.tags.validators.CompareValidator
fieldToValidate
属性をこれらの 2 つのフィールドに設定します。次に例を示します。
fieldToValidate="field_1,field_2"
myPackage.myValidatorClass
WebLogic JSP フォーム検証タグの JSP 内での使い方
検証タグを JSP で使用するには、次の手順に従います。
taglib
ディレクティブを入力して、WebLogic JSP フォーム検証タグ が存在するタグ ライブラリを参照します。次に例を示します。
<%@ taglib uri="tagl" prefix="wl" %>
プレフィックス属性では、JSP ページのすべてのタグを参照するために使用されるプレフィックスを定義します。プレフィックスは任意の値に設定できますが、このマニュアルでは wl
というプレフィックスを使用してタグが参照されます。
<wl:summary> ... </wl:summary>
タグを入力します。
開始タグの <wl:summary ...>
を、ページ上のすべての HTML コード、JSP タグ、スクリプトレット、または式の前に配置します。
終了タグの </wl:summary>
を、</wl:form>
の後ろの任意の場所に置きます。
<wl:form>
JSP タグを使用して、HTML フォームを定義します。詳細については、
<wl:form> および
<wl:form> タグを使用した HTML フォームの作成を参照してください。フォーム ブロックは必ず </wl:form>
タグを使用して閉じてください。フォームごとに <wl:form>
タグの name
属性をユニークに定義する場合、単一のページに複数のフォームを作成できます。
<input>
タグを使用して、HTML フォームのフィールドを作成します。
<wl:validator>
タグを追加します。このタグの構文については、
<wl:validator>を参照して ください。エラー メッセージまたは画像を表示するページ上の場所に <wl:validator>
タグを配置します。同じページで複数のフォームを使用する場合、<wl:validator>
タグを、検証するフォーム フィールドが存在する <wl:form>
ブロックの中に配置します。
次の例は、必須フィールドの検証を示したものです。
<wl:form name="FirstForm" method="POST" action="thisJSP.jsp">
<wl:validator
errorMessage="Field_1 is required" expression=""
fieldToValidate="field_1"
validatorClass=
"weblogicx.jsp.tags.validators.RequiredFieldValidator"
>
<img src="images/warning.gif">
<font color=red>Field 1 is a required field</font>
</wl:validator>
<p> <input type="text" name = "field_1"> </p>
<p> <input type="text" name = "field_2"> </p>
<p> <input type="submit" value="Submit FirstForm"> </p>
</wl:form>
ユーザが field_1
に値を入力しなかった場合は、ページが再表示され、warning.gif
画像と「Field 1 is a required field
」というテキスト(赤色)が表示され、値を再入力するための空白フィールドが続いて表示されます。
ext
ディレクトリの weblogic-vtags.jar
ファイルを、使用する Web アプリケーションの WEB-INF
\lib
ディレクトリにコピーします。このディレクトリは作成が必要な場合があります。
web.xml
デプロイメント記述子に <taglib>
要素を追加することによって、Web アプリケーションがこのタグ ライブラリを使用するようコンフィグレーションします。次に例を示します。
<taglib>
<taglib-uri>tagl</taglib-uri>
<taglib-location>
/WEB-INF/lib/weblogic-vtags.jar
</taglib-location>
</taglib>
Web アプリケーション デプロイメント記述子の詳細については、「Web アプリケーションのデプロイメント記述子の記述」を参照してください。
<wl:form> タグを使用した HTML フォームの作成
この節では、JSP ページに HTML フォームを作成する方法について説明します。ページに 1 つまたは複数のフォームを作成するには、<wl:form>
タグを使用します。
単一のフォームの定義
weblogic-vtags.jar
タグ ライブラリに含まれている <wl:form>
タグを使用します。次に例を示します。
<wl:form method="POST" action="nextPage.jsp">
<p> <input type="text" name ="field_1"> </p>
<p> <input type="text" name ="field_2"> </p>
<p> <input type="submit" value="Submit Form"> </p>
</wl:form>
このタグの構文については、 <wl:form>を参照してください。
複数のフォームの定義
ページで複数のフォームを使用する場合は、name
属性を使用して各フォームを識別します。次に例を示します。
<wl:form name="FirstForm" method="POST" action="thisJSP.jsp">
<p> <input type="text" name="field_1"> </p>
<p> <input type="text" name="field_2"> </p>
<p> <input type="submit" value="Submit FirstForm"> </p>
</wl:form>
<wl:form name="SecondForm" method="POST" action="thisJSP.jsp">
<p> <input type="text" name="field_1"> </p>
<p> <input type="text" name="field_2"> </p>
<p> <input type="submit" value="Submit SecondForm"> </p>
</wl:form>
検証によってエラーが返されたときにフィールド内の値を再表示する
バリデータ タグによってエラーが発見され、JSP ページが再表示されたときに、ユーザが入力した値を再表示して、フォーム全体を再び入力する必要がないようにしておくと便利です。この場合、HTML <input>
タグの value
属性を使用するか、Apache Jakarta プロジェクトから使用できるタグ ライブラリを使用します。次に、これらの属性について説明します。
<input> タグを使用した値の再表示
javax.servlet.ServletRequest.getParameter()
メソッドと HTML <input>
タグの value
属性を一緒に使用すると、検証の失敗によってページが再表示されるときにユーザの入力を再表示できます。次に例を示します。
<input type="text" name="field_1"
value="<%= request.getParameter("field_1") %>" >
クロスサイト スクリプティングによるセキュリティの危険性を防ぐには、ユーザ入力の中にある HTML の特殊文字を実体参照に置き換える必要があります。 JSP でのユーザ入力データのセキュリティ対策を参照してください。
Apache Jakarta <input:text> タグを使用した値の再表示
Apache Jakarta プロジェクトの無償で使用できる JSP タグ ライブラリを使用することもできます。このタグ ライブラリには、HTML <input>
タグの代わりとして <input:text>
タグが用意されています。たとえば、次の HTML タグがあるとします。
<input type="text" name="field_1">
このタグは、Apache タグ ライブラリを使用すると次のように入力できます。
<input:text name="field_1">
詳しい情報とドキュメントについては、Input Tag library をダウンロードしてください。
Apache タグ ライブラリを JSP で使用するには、次の手順に従います。
input.jar
ファイルを Web アプリケーションの WEB-INF
\lib
ディレクトリにコピーします。
<%@ taglib uri="input" prefix="input" %>
web.xml
デプロイメント記述子に追加します。
<taglib>
<taglib-uri>input</taglib-uri>
<taglib-location>/WEB-INF/lib/input.jar</taglib-location>
</taglib>
カスタム バリデータ クラスの使い方
独自のバリデータ クラスを使用するには、次の手順に従います。
weblogicx.jsp.tags.validators.CustomizableAdapter
抽象クラスを拡張する Java クラスを記述します。詳細については、
CustomizableAdapter クラスの拡張を参照してください。
validate()
メソッドを実装します。このメソッドでは、次のことを行います。
ServletRequest
オブジェクトからルックアップします。次に例を示します。
String val = req.getParameter("field_1");
true
を返します。
.class
ファイルを Web アプリケーションの WEB-INF
\classes
ディレクトリに格納します。
validatorClass
属性に指定することによって、そのクラスを <wl:validator>
タグで使用します。次に例を示します。
<wl:validator errorMessage="This field is required" fieldToValidate="field_1" validatorClass="mypackage.myCustomValidator">
CustomizableAdapter クラスの拡張
CustomizableAdapter
クラスは、Customizable
インタフェースを実装し、以下のヘルパー メソッドを提供する抽象クラスです。
getFieldToValidate()
<wl:validator>
タグの fieldToValidate
属性によって定義される)の名前を返します。
getErrorMessage()
<wl:validator>
タグの errorMessage
属性で定義されるエラー メッセージのテキストを返します。
getExpression()
<wl:validator>
タグに定義される expression
属性のテキストを返します。
CustomizableAdapter
クラスを拡張する代わりに、Customizable
インタフェースを実装できます。詳細については、weblogicx.jsp.tags.validators.Customizable の Javadoc を参照してください。
カスタム検証クラスのサンプル
コード リスト 5-1 カスタム検証クラスの例
import weblogicx.jsp.tags.validators.CustomizableAdapter;
public class myCustomValidator extends CustomizableAdapter{
public myCustomValidator(){
super();
}
public boolean validate(javax.servlet.ServletRequest req)
throws Exception {
String val = req.getParameter(getFieldToValidate());
// 検証ロジックを実行
// 検証が成功した場合は true を返す
// それ以外の場合は false を返す
if (true) {
return true;
}
return false;
}
}
検証タグを使用したサンプル JSP
このサンプル コードには、WebLogic JSP フォーム検証タグを使用する JSP の基本的な構造が示されています。WebLogic Server と一緒にサンプルをインストールした場合は、完全に機能するサンプル コードも使用できます。サンプル コードの実行手順については、インストールした WebLogic Server の samples
\examples
\jsp
\tagext
\form_validation
\package.html
を参照してください。
コード リスト 5-2 WebLogic JSP フォーム検証タグと JSP
<%@ taglib uri="tagl" prefix="wl" %>
<%@ taglib uri="input" prefix="input" %>
<wl:summary
name="summary "
headerText="<font color=red>Some fields have not been filled out correctly.</font>"
redirectPage="successPage.jsp"
>
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body bgcolor="#FFFFFF">
<% if(summary.size() >0 ) {
out.println("<h3>" + headerText + "</h3>");
} %>
<% if (summary.size() > 0) {
out.println("<H2>Error Summary:</h2>");
for (int i=0; i < summary.size(); i++) {
out.println((String)summary.elementAt(i));
out.println("<br>");
}
} %>
<wl:form method="GET" action="successPage.jsp">
User Name: <input:text name="username"/>
<wl:validator
fieldToValidate="username"
validatorClass="weblogicx.jsp.tags.validators.RequiredFieldValidator"
errorMessage="User name is a required field!"
>
<img src=images/warning.gif> This is a required field!
</wl:validator>
<p>
Password: <input type="password" name="password">
<wl:validator
fieldToValidate="password"
validatorClass="weblogicx.jsp.tags.validators.RequiredFieldValidator"
errorMessage="Password is a required field!"
>
<img src=images/warning.gif> This is a required field!
</wl:validator>
<p>
Re-enter Password: <input type="password" name="password2">
<wl:validator
fieldToValidate="password,password2"
validatorClass="weblogicx.jsp.tags.validators.CompareValidator"
errorMessage="Passwords don't match"
>
<img src=images/warning.gif> Passwords don't match.
</wl:validator>
<p>
<input type="submit" value="Submit Form"> </p>
</wl:form>
</wl:summary>
</body>
</html>