prototype的Ajax向Struts2发送'&_='的小bug

来源:互联网 发布:淘宝页头招牌怎么修改 编辑:程序博客网 时间:2024/06/16 08:35

 prototype的Ajax向Struts2发送'&_='的小bug

(by goodhumor)

    前段时间调J2EE程序时打开Struts2开发模式(<constant name="struts.devMode" value="true"/>),
Tomcat经常显示log的如下的错误:

[ERROR][http-8080-12]com.opensymphony.xwork2.interceptor.ParametersInterceptor
(ParametersInterceptor.java:204)- ParametersInterceptor - [setParameters]:
Unexpected Exception caught setting '_' on 'class cdbp.action.admin.RegistAction:
Error setting expression '_' with value '[Ljava.lang.String;@3744bc'

    刚开始从jsp页面找错,愣是没找到哪有个'_'参数,而且这个小bug也不影响程序正确执行,
因而扔在一边不管了。今天心血来潮再细查一遍,终于查到原因。

    原来某个JSP页面中用到prototype-1.4.0.js的Ajax.Request发送请求,而prototype-1.4.0.js
中的631行加上了'_'参数,如下:

request: function(url) {
    var parameters = this.options.parameters || '';
    if (parameters.length > 0) parameters += '&_=';//(1)就是这了
    ……
    把该行屏蔽掉,Struts2再也不报以上错误了。

prototype-1.6.0.js也有类似语句(1222行):

if (params = Object.toQueryString(params)) {
      // when GET, append parameters to URL
      if (this.method == 'get')
        this.url += (this.url.include('?') ? '&' : '?') + params;
      else if (/Konqueror|Safari|KHTML/.test(navigator.userAgent))
        params += '&_='; //(2)就是这了
    }

    不知prototype为何非要加上这个请求参数,难道"Konqueror|Safari|KHTML"要求的?
    反正用IE和FF的人较多,把该句屏蔽掉不管了。

原创粉丝点击