ヘッダーをスキップ
Oracle® Fusion Middleware Oracle WebLogic Server Web アプリケーション、サーブレット、JSP の開発
11g リリース 1 (10.3.1)
B55521-01
  目次
目次

戻る
戻る
 
次へ
次へ
 

15 WebLogic JSP フォーム検証タグの使い方

以下の節では、WebLogic JSP フォーム検証タグの使い方について説明します。

WebLogic JSP フォーム検証タグの概要

WebLogic JSP フォーム検証タグは、JSP ページによって生成される HTML フォームのテキスト フィールドにユーザが入力するエントリを検証するための便利な方法です。WebLogic JSP フォーム検証タグを使用すると、よく使用される検証ロジックを繰り返しコーディングする必要がなくなります。検証は、WebLogic Server 配布キットに含まれている複数のカスタム JSP タグによって行われます。JSP フォーム検証タグの機能は次のとおりです。

検証タグによってフィールド内のデータが正しく入力されていないことが判明した場合、そのページが再表示され、再入力が必要なフィールドがテキストまたは画像で示され、エンド ユーザに注意が促されます。フォームに正しく入力されると、エンド ユーザのブラウザには検証タグで指定された新しいページが表示されます。

検証タグ属性のリファレンス

この節では、WebLogic フォーム検証タグとその属性について説明します。タグを表すために使用されるプレフィックスは、JSP ページの taglib ディレクティブで定義できます。このマニュアルでは、理解しやすいように wl というプレフィックスを使用して WebLogic フォーム検証タグを表します。

<wl:summary>

<wl:summary> は、検証用の親タグです。<wl:summary> の開始タグは、JSP 内のすべての要素または HTML コードの前に置きます。終了タグの </wl:summary> は、終了タグ </wl:form> の後ろの任意の場所に置きます。

  • name - (省略可能) JSP ページの <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 - フォーム検証でエラーが返されない場合に表示されるページの URL です。この属性は、<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 - フォーム検証でエラーが返されない場合に表示されるページの URL です。この属性の値は、<wl:summary> タグの redirectPage 属性の値に優先します。この属性は、単一の JSP ページに複数のフォームを定義する場合に便利です。

    action 属性を <wl:form> タグが配置されているページに設定しないでください。無限ループとなって StackOverFlow 例外が発生します。

  • name - この機能は、HTML <form> タグの name 属性とまったく同じです。同じページで複数のフォームが使用される場合にフォームを識別します。また、name 属性はフォームへの JavaScript 参照にも便利です。

<wl:validator>

フォーム フィールドごとに、1 つまたは複数の <wl:validator> タグを使用します。たとえば、正規表現と照らし合わせて入力を検証し、かつ、フィールドに何らかの入力が必要な場合、2 つの <wl:validator> タグを使って、1 つでは RequiredFieldValidator クラス、もう 1 つは RegExpValidator クラスを使用します (空の値は Regular Expression Field Validator で有効と評価されるので、この両方のバリデータを使用する必要があります)。

  • errorMessage - <wl:summary> タグの name 属性によって定義されるベクトル変数に格納される文字列です。

  • expression - RegExpValidator クラスを使用すると、正規表現が評価されるようになります。RegExpValidator を使用しない場合、この属性は省略できます。

  • fieldToValidate - 検証するフォーム フィールドの名前です。フィールド名は、HTML <input> タグの name 属性で定義されます。

  • validatorClass - 検証ロジックを実行する Java クラスの名前です。3 つのクラスを使用できます。また、独自のバリデータ クラスを作成することもできます。詳細については、「カスタム バリデータ クラスの使い方」を参照してください。

    使用できる検証クラスは以下のとおりです。

    • weblogicx.jsp.tags.validators.RequiredFieldValidator - テキストがフィールドに入力されているかどうかを検証します。

    • weblogicx.jsp.tags.validators.RegExpValidator - 標準の正規表現を使用してフィールド内のテキストを検証します。注意 : 空白の値も有効と評価されます。

    • weblogicx.jsp.tags.validators.CompareValidator - 2 つのフィールドに同じ文字列が入力されているかどうかをチェックします。このクラスを使用する場合、fieldToValidate 属性をこれらの 2 つのフィールドに設定します。次に例を示します。

      fieldToValidate="field_1,field_2"
      

      両方のフィールドが空白の場合でも、比較は有効と評価されます。

    • myPackage.myValidatorClass - カスタム バリデータ クラスを指定します。

WebLogic JSP フォーム検証タグの JSP 内での使い方

検証タグを JSP で使用するには、次の手順に従います。

  1. JSP を記述します。

    1. taglib ディレクティブを入力して、WebLogic JSP フォーム検証タグがあるタグ ライブラリを参照します。次に例を示します。

      <%@ taglib uri="tagl" prefix="wl" %>
      

      プレフィックス属性では、JSP ページのすべてのタグを参照するために使用されるプレフィックスを定義します。プレフィックスは任意の値に設定できますが、このマニュアルでは wl というプレフィックスを使用してタグを参照します。

    2. <wl:summary> ... </wl:summary> タグを入力します。

      開始タグの <wl:summary ...> を、ページ上のすべての HTML コード、JSP タグ、スクリプトレット、式の前に配置します。

      終了タグの </wl:summary> を、</wl:form> の後の任意の場所に置きます。

    3. 付属のタグ ライブラリに登録されている <wl:form> JSP タグを使用して、HTML フォームを定義します。詳細については、「<wl:form>」および「<wl:form> タグを使用した HTML フォームの作成」を参照してください。フォーム ブロックは必ず </wl:form> タグを使用して閉じてください。フォームごとに <wl:form> タグの name 属性をユニークに定義する場合、単一のページに複数のフォームを作成できます。

    4. HTML <input> タグを使用して、HTML フォームのフィールドを作成します。

  2. <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」というテキスト (赤色) が表示され、値を再入力するための空のフィールドが続いて表示されます。

  3. WebLogic Server の ext ディレクトリの weblogic-vtags.jar ファイルを、使用する Web アプリケーションの WEB-INF/lib ディレクトリにコピーします。このディレクトリは作成する必要がある場合もあります。

  4. Web アプリケーションの web.xml デプロイメント記述子に taglib 要素を追加することによって、Web アプリケーションでこのタグ ライブラリが使用されるようコンフィグレーションします。次に例を示します。

    <taglib>
      <taglib-uri>tagl</taglib-uri>
      <taglib-location>
        /WEB-INF/lib/weblogic-vtags.jar
      </taglib-location>
    </taglib>
    

<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 特殊文字をすべて 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">

詳細およびドキュメントについては、http://jakarta.apache.org/taglibs/doc/input-doc/intro.html の「Input Tag library」を参照してください。

Apache タグ ライブラリを JSP で使用するには、次の手順を実行します。

  1. Input Tag Library 配布ファイルに含まれている input.jar ファイルを Web アプリケーションの WEB-INF/lib ディレクトリにコピーします。

  2. 次のディレクティブを JSP に追加します。

    <%@ taglib uri="input" prefix="input" %>
    
  3. 次のエントリを、Web アプリケーションの web.xml デプロイメント記述子に追加します。

    <taglib>
        <taglib-uri>input</taglib-uri>
        <taglib-location>/WEB-INF/lib/input.jar</taglib-location>
    </taglib>
    

カスタム バリデータ クラスの使い方

独自のバリデータ クラスを使用するには、次の手順に従います。

  1. weblogicx.jsp.tags.validators.CustomizableAdapter 抽象クラスを拡張する Java クラスを記述します。詳細については、「CustomizableAdapter クラスの拡張」を参照してください。

  2. validate() メソッドを実装します。このメソッドでは、次のことを行います。

    1. 検証するフィールドの値を ServletRequest オブジェクトからルックアップします。次に例を示します。

      String val = req.getParameter("field_1");
      
    2. フィールドが検証条件を満たしている場合、true を返します。

  3. バリデータ クラスをコンパイルし、コンパイル結果の .class ファイルを Web アプリケーションの WEB-INF/classes ディレクトリに格納します。

  4. バリデータ クラス名を 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 インタフェースを実装できます。詳細については、Javadoc で weblogicx.jsp.tags.validators.Customizable について参照してください。

ユーザの記述によるバリデータ クラスのサンプル

コード リスト 15-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 を参照してください。

コード リスト 15-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>