解惑

解己之惑,解人之惑

标签:问题 (第2页共3页)

zk的国际化不够好

官方文档中说国际化很简单,资源文件放在WEB-INF下,文件名固定,都是i3-label.properties,简体中文的就是i3-label_zh_CN.properties。
按照官方文档说的,修改Locale就是:
session.setAttribute(Attributes.PREFERRED_LOCALE,xxxLocale)
但是根本不好使,后来搜索了下,发现需要设置:
Locales.setThreadLocal(xxxLocale)

另外一个问题是页面的刷新是个问题,如果不考虑用户已有的操作,假设用户进入首页没有做什么事情,首先改变Locale,那么刷新比较简单:
Executions.getCurrent().sendRedirect(“”)

国际化在页面中使用也比较丑陋,先是:
<?taglib uri="http://www.zkoss.org/dsp/web/core" prefix="c" ?>

<toolbarbutton label="${c:l(‘button.add’)}" image="../images/add.png" onClick="userListWindow.onAdd()"/>
比较理想的应该是像数据绑定一样,能够声明某个东西,然后Label的内容都从资源文件取:
<?init class="xxx.I18nBinderInit"?>
<toolbarbutton label="button.add" image="../images/add.png" onClick="userListWindow.onAdd()"/>

当然,这个功能可能自己也可以自己实现,有时间我会试试。

最后说的一点就是zk的默认中文是繁体中文,比较难受。

java.lang.ClassCastException: com.sun.tools.javadoc.ClassDocImpl

这个是在生成Javadoc的时候发现的,google了下,不少问的,第一个是说这个是个bug,其实以前也google过,看到那个说是bug而且优先级是4-Low,状态也不是close就没有去理会这个问题,这次又搜索了下,耐着性子看了几个帖子,发现这个不是bug,而是有解决方案,因为我是在ant脚本里面加的,解决方案就是在javadoc的task指定classpath或者classpathref,只要和你编译那些类使用一样的classpath或者classpathref就行。

淘汰金山词霸Google版

从前天开始不能启动了,发现其他一些同事也遇到同样的问题,今天先卸载了,然后重装,过了一会提示它更新了,需要重启,点击确定,啪,出错了。系统都变得不稳定,打开什么都出那个问题。重启系统,金山词霸倒是可以运行了,但是很失望,卸载,换用灵格斯。

WordPress Database Backup不好用

今天回来的第一件事情就是备份数据库,原来的插件不好用,备份出来的文件都不能打开,CRC出错,而且经常备份到一半就停止了,下载了最新的2.2.2版本,不会停止了,但是文件还是不能打开。

没有办法,登录到盘古的cPanel,发现有 phpMyAdmin,用它的导出功能把数据库导出来了,还是发现一个不足的地方,它的文件编码是GBK,那些数据库脚本的注释可以正常显示,但是数据里面都是乱码,用UTF-8重新load,发现数据可以正常显示为中文,但是注释是乱码了。

千万不要升级到最新版本的msn

今天手痒,看到msn提示有新版本就升级了一把,结果每隔几秒就自动断线了,汗一个,想卸载,找了半天没有找到,后来试了下,发现藏在windows live essential里面了。卸载,重新安装新版本,一切恢复正常。

浏览器缓存

相信有不少人会遇到浏览器缓存的问题,因为IE默认会缓存访问过的网页,特别是URL的参数是固定的,但是很可能内容会变化。
大部分都知道的可能是在head中增加meta信息:
<META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">
而有文章指出这个依然有问题,如果网页内容超过32K,那么那个设置就实效了,所以要把它放到网页的最后:
            <BODY>
网页内容。。。
</BODY>
<HEAD>
<META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">
</HEAD>
</HTML>

现在AJAX很流行,而AJAX返回的内容很可能不再是一个完整的网页,那么就不能使用上述的方法,有另外的文章说到可以使用服务器端的HTTP头控制,我试验的结果是无效
    response.setHeader("Cache-Control","no-cache");
    response.setHeader("Cache-Control","no-store");
    response.setHeader("Cache-Control","must-revalidate");

最后采取的方法就是在使用AJAX发送请求的时候附加一个时间戳:
var xmlhttp = createrequest();
xmlhttp.open("GET",appendTimestamp(url),true);

  function appendTimestamp(url)
  {
      if (url.indexOf("?")>0)
      {
          return url+"&ajax_time="+new Date().getTime();
      } else
      {
          return url+"?ajax_time="+new Date().getTime();
      }
  }

当然这个方法也只能解决部分问题,如果URL太长也不行。

更新:
对于AJAX的情况,也可以使用
xmlhttp.setRequestHeader("Cache-Control","no-cache");

推荐另外一个日志:再论怎么有效利用浏览器缓存之怎么避免浏览器缓存静态文件

2007年2月28日更新:
使用服务器端控制AJAX页面缓存:
    response.setHeader( "Pragma", "no-cache" );
    response.addHeader( "Cache-Control", "must-revalidate" );
    response.addHeader( "Cache-Control", "no-cache" );
    response.addHeader( "Cache-Control", "no-store" );
    response.setDateHeader("Expires", 0);
单纯的使用 xmlhttp.setRequestHeader("Cache-Control","no-cache")无效。

Crystal Report的几个问题

我们美国那边做Crystal Report的人走了,所以这个版本中,Crystal Report相关的一些bug就都由我来修改了,很痛苦
在这个过程中深切的感受到Crystal Report的一些问题:

  • 没有比较好的重用机制,特别是一些公式或者Formula以及显示内容的格式,而模版功能还不够强大
  • 子报表不能再包含子报表,这个也很痛苦,在创建复杂的报表内容的时候尤其痛苦,只能通过修改视图解决
  • 从数据库取数据的时候默认是大小写不敏感的
  • RPT文件是二进制格式,不利于版本比较
  • 保存数据库结构信息,例如表的完整定义,如果更新了数据库,那么报表可能不能运行,但是实际上修改对报表没有影响(例如增加了一个表字段)

慎用JavaScript修改Form的元素的值

很早就收到一个Bug说修改了某个元素的值以后,点击Next提交然后使用浏览器的Back按钮返回,结果那个元素的值是提交以前的值。
这个应该是浏览器的History功能的限制,它不能记录你的Javascript代码对Form元素的值的修改。在完成向导之类的功能的时候不要使用自定义的表单元素,或者不要用JavaScript去修改其它的需要提交的元素的值,这些修改都不会被浏览器的History功能记录。当用户点击浏览器的后退时,他可能看到不是他期望的结果。
一般要解决这个问题,要么禁用浏览器的后退功能(很多MIS系统可能都是这么干的),自己另外提供一个后退功能重新从后台取数据并刷新页面。
要么使用Cookie记录那些操作并在页面的onload事件里面从Cookie提取那些记录。
无论是那种方法都不是很方便。

不知道有没有完美的解决方案。另外这个问题对IE和FF都是有效的。

如何解决问题

对于新手而言,最大的问题可能就是遇到问题完全没有头绪,特别是程序出错的时候,简单的说一下我解决问题的方式。

  1. 首先就是看错误信息,发生错误,一般都会有一些错误信息,在控制台或者日志里面,要仔细的看那些错误信息,有时候错误信息的提示已经指出了问题的所在,如果是一堆的调用堆栈,最重要的就是最开始的错误信息和caused by的那个错误信息。通过这个方式我们至少可以解决20%的问题。
  2. 如果是自己写的或者公司其他同事的代码出错,那么就要从错误堆栈信息里面找自己公司代码的那些行了,并且重新浏览一遍那些代码,思考可能的出错原因并进行调试。一定要知道如何使用IDE进行调试。
  3. 如果不是公司的代码出错,而是使用的服务器或者第三方组件出错,那么就直接把出错信息贴到google里面搜索下其他人出现的相同问题,并找到可能和你一样的问题。
  4. 如果是第三方的代码出的问题,并且是比较简单的开源组件,看看相关的源代码也是一个选择。
  5. 如果还不能搞定,那么找公司的其他同事帮忙,特别是你认为对所出现的问题比较熟悉的人。当然,你应该首先判断是哪方面的问题。
  6. 最后就是上论坛提问题,期望有人遇到过相同问题,或者是高手帮你分析问题并提示你如何确定问题。
  7. 最后一招就是修改实现方式,绕过问题,有些是服务器、OS的限制,使用其他的方法搞定吧。

修改永久链接后的遭遇

为了搜索引擎更好的收录而修改了永久链接的格式,但是出了一个问题,热门日志的链接都不好用了,看了下,都是老的永久链接的格式,看了下代码,原来代码使用了数据库的guid字段,修改永久链接不会自动的修改对应的guid,没有办法,只好手工修改数据库了,本来是可以修改代码纠正的,但是想想还是把数据库里面的值也修改下好了。

使用的SQL语句:
update wp_posts set guid=concat(‘http://www.jiehoo.com/’,post_name,’.htm’) where guid like ‘http://www.jiehoo.com/2006/1%/’;

阅读全文

更早的文章 更新的文章

© 2024 解惑

本主题由Anders Noren提供向上 ↑