查看文章 |
HTML标签使用中文做name要谨慎
2009-05-16 13:08
基于Struts的开发中,有时可能会需要使用中文做为html标签的name,这时一定要谨慎。 例如这样一个场景,有一个名单列表,这个列表除了人的姓名以外没有唯一键 ![]() 这个列表后面有一对单选按钮可以操作,这时为了将每一行的单选按钮划到一组中去,我们会为他们赋一个name,最简单的办法就是直接用他们的姓名。如下: ![]() 本来这也没什么,但是如果你的页面端使用GBK编码,在不对这些radio进行特殊处理的情况下,那么页面在提交的时候,Struts会侦测到这个属性然后调用BeanUtils进行Form的populate,而这时问题就来了。上图中的那个问题派的“李芠奇”中间的那个“芠”字在解码时会变成一串乱码,光是乱码也没什么,也不是很关心它,偏偏乱码中间有个“[”,这恰恰是BeanUtils进行数组判断的标记,于是在找不到“]”的时候发生了异常。 这个Bug的综合因素很多,但是不幸我中奖了。最初还找错了方向,以为是我提交的JSON串出了问题。 解决办法: 1. 使用列表的index做name,这样做系统最省事。推荐使用。 2. 页面使用UTF-8编码,使用Filter或是其他的什么方法进行编码转换。 3. 不使用中文做为HTML标签的name值,可以使用这个中文的hashCode,我在此案例中是这么解决的,但没办法,有很多因素限制。 4. 在提交前处理掉radio,比如disable它,但是觉得有点无聊,呵呵 |
最近读者:


