【问题标题】:How to check if form was submitted in Java如何检查表单是否在 Java 中提交
【发布时间】:2014-09-13 09:24:11
【问题描述】:

我在jsp中有一个表单:

<form id="emailForm" data-role="form">
      <input type="text" class="form-control" id="name" name="name" placeholder="Enter full name..">
   <input type="submit" id="emailSubmit" name="emailSubmit" class="btn btn-default" value="submit">
</form>

我使用 AJAX 将表单发送到控制器:

$("#emailSubmit").click(function(e){
        e.preventDefault(); //STOP default action
    var postData    = $("#emailForm").serializeArray();
        $.ajax(
            {
                type: "POST",
                url : "HomeController",
                data : postData,
                success: function(data) 
                {
                    $("#emailResult").html("<p>Thank your for submitting</p>);

                },
                error: function(jqXHR, textStatus, errorThrown) 
                {
                    $("#emailResult").html("<p>ss"+errorThrown+textStatus+jqXHR+"</p>");
                }
            });
});

我在这里检查是否已经在Controller中提交:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    String emailSubmit = request.getParameter("emailSubmit");

    if(emailSubmit != null){
        // continue
    }}

谁能告诉我为什么当它检查表单是否在控制器中提交时它是null

【问题讨论】:

  • 你在javascript端有什么post数据?因为它不会发布您的表格。此外,正常的浏览器请求是 GET;因此,如果调用 doPost,您可以很确定某些内容来自您的代码(或黑客)。
  • var postData = $("#emailForm").serializeArray();
  • 不确定,那个按钮值会被序列化,你正在检查。
  • @ElliottFrisch 表单发送参数很好。我通过将条件语句更改为== 来检查这一点,它可以工作。
  • @crm 如果可行,您能解释一下您的问题吗?您确定参数没有到达 Servlet 吗?哪方面有问题?

标签: java jquery ajax forms submit


【解决方案1】:

对于表单,标准方法是捕获submit 事件而不是按钮的click 事件:

$("#emailForm").submit(function(e){
    e.preventDefault();
    var postData = $(this).serializeArray(); // or: $(this).serialize();
    $.ajax({
        type: "POST",
        url : "HomeController",
        data : postData,
        success: function(data) 
        {
            $("#emailResult").html("<p>Thank your for submitting</p>);

        },
        error: function(jqXHR, textStatus, errorThrown) 
        {
            $("#emailResult").html("<p>ss"+errorThrown+textStatus+jqXHR+"</p>");
        }
    });
});

【讨论】:

    【解决方案2】:

    我尝试了几种方法来检查提交按钮是否为空并且无法解决该问题。现在我已经在表单中设置了一个隐藏的输入字段,如下所示:

    &lt;input type="hidden" name="form" value="contactForm"&gt;

    在控制器中我检查表单:

    String form     = request.getParameter("form");
        if(form.equals("contactForm")){
            // continue
        }
    

    这样做可以让我知道哪个表单已发布到控制器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-04
      • 1970-01-01
      • 2019-09-10
      • 2014-06-09
      • 1970-01-01
      • 2016-12-08
      相关资源
      最近更新 更多