3

2つのHTMLフォームがあります。1つにはHiddenFieldタグがあり、もう1つにはタグがありません。非表示フィールドタグを持つ最初のHTMLフォームを検証する場合、フィールド名とその値を取得することでサーブレットで検証できます。以下に示す例、

隠しタグ付きのHTMLフォーム

<form action="/myServlet" method="post" enctype="multipart/form-data">  
<input type="hidden" name="myname" value="myvalue"/>
<input type="file" name="file"/>
<input type="submit" value="Submit"/>

隠しフィールドを検証するサーブレット

ServletFileUpload upload = new ServletFileUpload();
FileItemIterator iter;
iter = upload.getItemIterator(request);
while (iter.hasNext()) {
   item = iter.next();
   String fileName =  item.getName();
   String fieldName = item.getFieldName();
   if (item.isFormField()) {
   String fieldValue = Streams.asString(item.openStream());
   if (fieldName.equals("myname")){ //validating Hidden form tag name
         // some process goes here
   }
}

上記のコードを使用すると、非表示フォームフィールドを検証できますが、非表示タグがない以下のHTMLフォームがある場合は、検証のためにサーブレットを処理する方法を説明します。

隠しタグのないHTMLフォーム

<form action="/myServlet" method="post" enctype="multipart/form-data"> 
//No hidden tag
<input type="file" name="file"/>
<input type="submit" value="Submit"/>

これらのさまざまなケースを検証できるようにしたいと思います。

  1. 非表示のフィールドを含むフォーム、およびフィールドのリクエストの一部のコンテンツ:有効
  2. 空の非表示フィールドを持つフォーム:無効
  3. 非表示フィールドのないフォーム:有効

主な問題は、最後の2つのケースを区別することです。

4

2 に答える 2

2

myname属性が存在するかどうかを知る必要がある場合は、それを示すフラグを設定できます。または、nullで初期化された文字列に値を格納します。

    boolean hasMyName = false;

    while (iter.hasNext()) {
       item = iter.next();
       String fileName =  item.getName();
       String fieldName = item.getFieldName();
       if (item.isFormField()) {
          String fieldValue = Streams.asString(item.openStream());
          if (fieldName.equals("myname")){ //validating Hidden form tag name
             hasMyName = true;
          }
    }

    if ( hasMyName ) {
        // myname is present, do something
    }
于 2013-02-01T09:57:17.957 に答える
2

私はこれをしていませんが、これを試してみることができます:

  1. フィールド名が「myHiddenField」であると思われる場合は、フォームに非表示フィールドを作成します。

  2. ここで、次の場合に取得しようとすると、このフィールドの白黒値に違いがあるかどうかを確認してください。

a。存在しません。

b。空白です。

nullと空白の値のようないくつかの区別を得ることができるかどうかを確認してみてください。私が言ったように、私はそれを自分で試していません。私の仮定では、ここで間違っている可能性があります。

于 2013-02-01T09:58:26.527 に答える