【问题标题】:how to validate hidden form field name which is not present in HTML form using servlet如何使用 servlet 验证 HTML 表单中不存在的隐藏表单字段名称
【发布时间】:2013-02-01 06:54:04
【问题描述】:

我有两个 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. 没有隐藏字段的表单:有效

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

【问题讨论】:

  • 你试过什么,你试过执行它看看,是的,隐藏字段可以在servlet中按名称访问,你试过检查吗??
  • @Sabarish 在这种情况下验证是什么意思?如果您没有 myname 字段,则无法验证它。我认为这是上传文件的另一个名称。如果您没有 myname,您可以分配 fileName 属性。
  • 是的,当隐藏标签存在时,我可以访问 servlet,我的问题是,因为我知道隐藏标签的名称,我可以在 servlet 中验证。如果 HTML 中不存在隐藏标记,那么我可以通过什么方式在 servlet 中进行验证。
  • 你不能,因为它永远不会被发送到你的 servlet。为什么您希望您的浏览器(或其他客户端)向您的服务器发送不存在的字段值?
  • 你想完成什么?您无法访问不存在的内容。

标签: java servlets


【解决方案1】:

如果您只需要知道 myname 属性是否存在,您可以设置一个标志来指示。或者将值存储在一个用 null 初始化的 String 中。

    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
    }

【讨论】:

  • 非常感谢堆垛机...它有效!
【解决方案2】:

我没有这样做,但你可以尝试一下:

  1. 在您认为应该存在的情况下在表单中创建一个隐藏字段,例如字段名称为“myHiddenField”。

  2. 现在,尝试在以下情况下尝试获取此字段的 b/w 值是否有任何差异:

一个。它不存在。

b.它是空白的。

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

【讨论】:

    猜你喜欢
    • 2012-06-28
    • 1970-01-01
    • 2017-08-23
    • 1970-01-01
    • 2019-01-29
    • 2017-06-17
    • 2013-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多