zoukankan      html  css  js  c++  java
  • 整合spring之后,struts2里面的自定义拦截器的invocation.invoke()总是返回input

    这个真的是整死我了,还好看见了一篇博客提示了我,

    解决方法:

      在spring的bean配置中我没有设置action的作用域为prototype,也就是多例的,如果不设置则就会是默认的singleton。

      也就是我们每次去调用action的时候都应该是一个新的action,而不是之前的action,所以就应该是多例模式的,而不是单例模式

      哎!整死我了!

      我把原文博客分享在这里:

        https://blog.csdn.net/zml_2015/article/details/50266783

     

      后来我竟然又遇到了这个问题,是在文件上传的时候遇到的,找了许久许久啊!这篇博客写的很好,我应该要自己根据他说的排查的

        https://blog.csdn.net/zc_ad/article/details/70146053

    如果登陆页面找到对应的action后,struts2默认在execute方法执行之前,会先执行validate验证方法,如果发现有errors,直接就中转到input所指向的页面.跳转到input之前就根本没有执行action的方法.

    画面事件响应,提交表单后,通过struts2的配置文件找到action,执行了其中的get,set方法,然后直接返回input,不走对应的方法。

    1.可能是由于某个参数传递失败导致的。struts2有自动验证的一些机制,例如:你用int age 提供了get,set方法但是你页面出入的是字符串,那struts2的拦截器会直接return input的,检查一下 你定义的变量和传进的参数类型是否匹配。

    2.你可能用了spring,在spring的配置文件中的bean没有设置singleton或者scope属性,singleton默认是"true",scope默认是"singleton"。如果你没有设置这个属性,相当于是单例模式,每次都用的是第一次产生的action对象,每次访问都会把信息存储在这个对象中。当你有一次访问出错,进入异常时,这个action对象的ActionErrors属性就可能有值。这时你再通过画面访问这个action时,就会直接返回input。在有必要的情况下,必须把action对应的bean的singleton设为"false",scope设为"prototype"。

    还有就是我上传的是图片,然后我没有在form表单上面设置enctype="multipart/form-data",这会导致什么呢?

        其实如果不设置这个也是可以上传文件的,但是只能够上传文本文件,这个参数的作用就是将上传的东西弄成二进制进行上传,这样上传的类型就不会只有文本了

        好比说我上传的图片,为什么会出现input呢?可能就是因为我上传的图片跟我后面action定义的file参数类型不匹配所导致的了,也就是上面所说的第一种情况

        呜呜呜呜呜,,

        整死我了,下次再也不会犯这样的错了,还好我遇到了这种情况,不然下次那不哭死

  • 相关阅读:
    【转】i18n实现前端国际化(实例)
    【转】SQL Pretty Printer for SSMS 很不错的SQL格式化插件
    windows server IIS启用Windows authentication
    【转】命令行下载各种网上各种视频
    解决python “No module named pip”
    【转】excel音标乱码
    【转】自动化部署之jenkins及简介
    【转】右键菜单管理
    【转】C# @作用
    【转】NGen
  • 原文地址:https://www.cnblogs.com/shiwanming/p/9776182.html
Copyright © 2011-2022 走看看