3

我有两个 HTML 表单,一个有隐藏字段标签,另一个没有标签。在验证具有隐藏字段标记的第一个 HTML 表单时,我可以通过获取它的字段名称和值在 servlet 中进行验证。示例如下所示,

带有隐藏标签的 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"/>

Servlet 验证隐藏字段

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 表单,它没有隐藏标签,那么如何处理我的 servlet 进行验证。

没有隐藏标签的 HTML 表单

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

我希望能够验证这些不同的情况:

  1. 带有隐藏字段的表单,以及该字段的请求中的一些内容:VALID
  2. 具有空隐藏字段的表单:无效
  3. 没有隐藏字段的表单:有效

主要问题是区分最后两种情况。

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. 现在,尝试在以下情况下尝试获取此字段的 b/w 值是否有任何差异:

一个。它不存在。

湾。它是空白的。

尝试看看是否能够区分空值和空白值。正如我所说,我自己没有尝试过。我的假设在这里可能是错误的。

于 2013-02-01T09:58:26.527 回答