5. パラメータ値のチェックとHTMLタグライブラリ
Struts 5章 パラメータ値のチェックとHTMLタグライブラリ
5.1. ActionForm Beanのvalidateメソッド2章で解説したActionForm BeanはHTTPパラメータの値を自動的に取得するものでした。これによりHTMLフォームに入力された値の取り扱いが、非常に楽になります。しかし実際には、HTMLフォームに入力された値をそのまま処理できるとは限りません。ユーザが必須項目の入力を忘れていたり、数字で入力すべきところを漢数字で入力したり、様々な入力ミスが想定されます。ActionForm Beanのvalidateメソッドは、設定されたHTTPパラメータ値がアプリケーションとして正しいかどうか確認するメソッドです。validateメソッドはorg.apache.struts.action.ActionFormで、以下のように定義されています。 ActionErrors validate(ActionMapping mapping, HttpServletRequest request) ActionServletはHTTPパラメータ値をActionForm Beanに設定した後、上記のvalidateメソッドを呼び出します。ActionErrorsはorg.apache.struts.action.ActionErrorオブジェクトを格納するリストクラスですが、要素数が0(またはnull)の場合は検証に合格した事を意味し、そうでない場合には何らかのエラーがある事を意味します。例として2章のProductFormにvalidateメソッドを追加します。ここではプロパティ「name」および「maker」が空行であるかどうかをチェックします。 package sample;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionError;
import org.apache.struts.action.ActionMapping;
import javax.servlet.http.HttpServletRequest;
public class ProductForm extends ActionForm{
プロパティ値に問題がある場合には、ActionErrorオブジェクトを生成してActionErrorsオブジェクトに追加します。addメソッドの第1引数に指定される値は、エラーメッセージを種類分けするためのキーです。次節で説明するエラーメッセージの表示の際に、使用する事ができます。 addメソッドの第2引数にActionErrorオブジェクトを指定します。ActionErrorのコンストラクタには、エラーメッセージをメッセージリソースから検索するためのキーを指定します。4章2節で説明したBeanタグライブラリのmessageタグが使用するメッセージリソースから、エラーメッセージも検索されます。したがってmessageタグの場合と同じようにメッセージリソースを用意し、かつ設定を行う必要があります。またActionErrorには引数を2〜5個取るコンストラクタもありますが、それはmessageタグのarg0〜arg4と同様で、検索されたメッセージのパラメータを置き換えるためのものです。 実はActionForm Beanにvalidateメソッドを実装しただけでは、不十分です。Struts設定ファイルも書き換える必要があります。ActionForm Beanを使用する<action>要素に、input属性を定義する必要があります。例として2章の設定を書き換えます。 ... <struts-config> ... <action-mappings> input属性はvalidateメソッドでエラーが検知された場合に表示されるJSP(サーブレット)を指定します。これまでの章で説明した処理を1つにまとめると以下のようになります。
実は<action>要素には、validate属性というものもあります。この属性は、validateメソッドを呼び出すかどうか定義するものです。デフォルトでこの属性の値は「true」となっているため、validateメソッドは常に呼び出されます。(ActionForm Beanにvalidateメソッドを実装しなかったとしても、org.apache.struts.action.ActionFormで定義されているvalidateメソッドが呼び出されます。ただしこのメソッドは何もしません。)もしActionForm Beanにvalidateメソッドを実装したものの、このメソッドを呼び出したくない場合には、明示的にvalidate属性に「false」を設定します。 <action path="/sample/productInput"
type="sample.ProductInputAction"
name="productForm"
scope="request"
validate="false"
input="/sample/productInput.jsp">
...
</action>
(実習課題1)2章実習課題4のWebアプリケーションを改良しなさい。
|
![]()
![]()
|