只有在第二次单击后,纯HTML提交按钮才会传递给控制器

时间:2013-01-03 03:55:40

标签: html spring-mvc

我的普通HTML中有很多提交按钮。不工作的一个如下: - 另一个与下面相同     

< form:submit cssClass="action-button" name="excelBTNX" value="Excel" id="excelBTNX"  /> 

控制器中上面按钮的功能是创建一个excel表并放入会话(我可以从cookies下载)并返回。

控制器中相应方法的定义与其他工作正常的按钮相同。

这个问题是,它仅在偶数计数时起作用。当我第一次点击页面时会刷新。当我第二次点击时,控制器会传递给控制器​​,我的excel会显示为cookie。

我尝试使用javaScript代码跟踪提交是否正常     

     $(‘form’).submit(function(){
     alert("event getting fired");
});

并为两种情况提供警报。

我已经从控制器(手动)完成了验证部分,因此不使用本地内置验证器。所以我认为情况并非如此。

我该如何解决?

控制器代码: -

 @RequestMapping(value = "execute.action", method = RequestMethod.POST, params = "excelBTNX")
public String excelOut(HttpServletRequest request, HttpServletResponse response,
        @ModelAttribute("mymodel") myModel model, BindingResult bindingResult, ModelMap modelmap) {

    scr14(request).initializeSomeCalculation(model);// some innercalss called to manupulate model
    HttpSession session = request.getSession(false);

    if(1=1){//CRUD condition here true in READ mode.
        model= new myModel ();
    }


    byte[] excel = createExcelS14(model,request);
    String fileName = getExcelName() + ".xls";
    String filepath = myFrameWorkUtils.createTempFile(excel, fileName);
    if (session != null) {
        session.setAttribute(fileDownload, filepath);
    }
  scr14(request).initializeSomeCalculation(model);
    model.setDate(somedate);
    return "myPanel";}

1 个答案:

答案 0 :(得分:0)

以下是一些步骤:

  • 检查此问题是否与您的Excel处理有关,或者是否与您的控制器有关。我假设你有像
  • 这样的东西
@RequestMapping(..., params = "excelBTNX")
public ModelAndView next(...) 
{ <EXCEL FUNCTIONALITY> }

只需在Controller中注释掉,并验证每次都调用该方法。请测试一下告诉我们这是否有效

  • 会发生什么使您认为Controller只在第二次点击时被调用?也许您所看到的迹象并不意味着控制器仅在每次点击时被调用。 请解释

  • 修复if (1=1)代码。 Java中的=是赋值运算符,==是比较运算符。我假设你想做一个比较。你似乎也简化了代码的这一部分,但它实际上可能是问题所在。 请在此处发布实际代码

  • 我在这里看不到任何关于cookies的信息。在我看来,您正在创建一个临时Excel文件,并在会话中设置文件的名称。

session.setAttribute(fileDownload, filepath)无法工作,因为会话属性映射的键是String类型。应该是session.setAttribute("fileDownload", filepath)

  • 您是否可以查看每次点击是否生成了新的临时Excel文件?你应该能够通过时间戳告诉我们。

这可能仍然没有指出问题,但它肯定会让我们更接近。