解决DWR2.0发送数据Locale为zh_C的BUG

在编程中,使用DWR进行AJAX交互。后台采用的是判断request的local来选择国际话资源,结果老是不正确,一查才发现Local竟然是zh_C。于是追溯到Servlet的doPost,还是zh_C。继续追溯,发现是HTTPXML做POST动作时,发送的language不对。但是jquery却能正常,比较了一下,发现DWR采用的是new ActiveXObject的方式产生的XMLHTTPRequest。而jquery是直接使用浏览器内置对象。难怪与通常的会不一致,也许IE的某个DOM出了问题,错把zh_C当zh_CN来用了吧。

找到问题了解决起来就简单。修改dwr的engine.js,找到以下语句:
      try {
        for (prop in batch.headers) {
          var value = batch.headers[prop];
          if (typeof value == "string") batch.req.setRequestHeader(prop, value);
        }
        if (!batch.headers["Content-Type"]) batch.req.setRequestHeader("Content-Type", "text/plain");
  }
添加修正头部浏览器语言的代码,改为这样:
      try {
        for (prop in batch.headers) {
          var value = batch.headers[prop];
          if (typeof value == "string") batch.req.setRequestHeader(prop, value);
        }
        if (!batch.headers["Content-Type"]) batch.req.setRequestHeader("Content-Type", "text/plain");
  //fix language header bug under IE
  if(navigator.systemLanguage){
   batch.req.setRequestHeader("accept-language", navigator.systemLanguage);
  }
      }
在servlet的doPost于是就收到了正确Locale

折腾死我了,google也找不到答案,幸好开源的能够追踪代码。

你可能感兴趣的:(jquery,c,String,servlet,DWR,XMLhttpREquest)