error:hibernate保存一对多set集合出现异常->Caused by: java.sql.BatchUpdateException: Duplicate entry '52-135' for key 'PRIMARY'
解决:为AppSortType增加 hashCode() & equals(Object obj)方法。
原因:Set集合内容纳元素不重复,Set集合在add一个元素时候先判断是否已有改元素,其中调用equals方法来执行相等判断。故实体bean要覆写hashCode()和equals(Object)方法来保证实体的相等判断结果的正确。
error: 使用json result type返回数据,在ie6下为文件下载操作。
解决:更改配置result type的参数为contentType->text/json
原因:webwork默认json result 的contentType为application/json,ie6不能识别为json数据,故当做文件流来下载。必须要指定为text/json,告知ie6为文本文件。
error: 使用json result type返回数据,在ie6下乱码。
解决:更改配置result type的参数为contentType->text/json;charset=GBK
原因:ie6下按默认编码解析文本,所以要指定编码为GBK与数据一致。
problem:使用Gson无法对实体进行json字符转换。
解决:使实体变为脱管状态,使用session.evict(entity).
原因:Gson对bean进行解析的时候用到了反射机制,而hibernate的托管实体有字节码增强,污染了原先实体bean的字节元数据,导致gson.parse(bean)结果为空对象{}。session.evict方法则可以将一个托管bean转换成游离的bean,还原成原始包含数据的实体对象,故可以给gson.parse(bean)正常解析。
problem:ie6下本地测试$.getJSON方式获取json,提示No Transport
解决:在ready Function外设置$.support,cors = true;在$.ajaxSteup({crossDamian:true});更改为跨域访问。
原因:ie对本地访问也认为是跨域访问,故getJSON需采用动态创建元素<script src="获取js的地址" ></script>来获取返回的json,称为jsonp。
problem:ie6下本地测试$.getJSON方式获取json,导致为拦截器拦截为没有登录,会话信息丢失。
解决:跨域访问不带cookie,而上sessionid表现在cookie中的jsessionid:XXXXXXXXXXXXXXXX,故在请求的json的地址后加上XXX.jspx;jsessionid=XXXXXXXXXXXXXX来实现url重写cookie,保持会话跟踪信息
原因:万恶的ie6,为什么就把localhost对localhost发起的ajax请求解析成跨域请求呢,不解。