解决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也找不到答案,幸好开源的能够追踪代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值