ExtJS实战(9)-疑难杂症分析
在做项目的过程中,难免会遇到大大小小的问题(这是好事情,要不我们怎么进步呢?),那么,我们就把一些共性的值得探讨的问题拿出来,一起分析下:
1. JS没有错误,但却一直报未结束的字符串常量
这个问题很有趣,后来发现是编码问题,在拷贝或写入中文前,写把JS文件的编码方式改为UTF-8
2.组合分页中,Hibernate报Unsupported method: ResultSet.absolute
我们知道这是结果集分页的方法,而JDBC的驱动是支持的。那么原因就只能是Hibernate中setFirstResult()为一负值
3.combo下拉列表框问题
首先是它命名的值一直传不到服务器端,而其它控件都可以。后来才发现,它比较特别,它提交表单的名字是由hiddenName属性决定,而不是name属性。再就是在我们的应用中有大量的下拉列表框,房屋的几室几厅,是静态的下拉框;而区域和街道的下拉列表框,却是动态的下拉框(所谓的动态,也就是里面的数据是从服务器端得到的!),并且区域和街道还有联动效果。这里比较棘手的就是动态的下拉框,所有区域信息我们可以在一开始就从服务器端加载保存到本地,因为查询,添加,编辑里都要用到。而街道和区域有联动关系,这个也可以通过DWR实现。最麻烦的地方在于编辑的表单显示的时候,区域和街道都要有值,也就是说在利用DWR取得某条房屋信息时,我们还要取得这条房屋信息所在区域的所有街道信息,这样才能达到我们的效果!
4.导入了汉化的JS文件,但时间控件依然没有变化。
要注意JS的导入顺序,ext-lang-zh_CN.js一定要在ext-all.js之后导入。
5.Criteria如何比较Date的大小,它能够使用统计函数吗?
这两个小问题也很值得思考Criteria里是不能使用时间函数的.那么比较日期就要使用点技巧,譬如查找2008-10-12日发布的租房信息。实际上就是查发布时间在2008-10-12 00:00:00 和2008-10-12 23:59:59之间的房子。
在hibernate 2.x版本,Criteria是不支持投影查询和统计函数的。但3.x是支持的。譬如查找hid的总记录数:setProjection(Projections.count("hid"));
6.有时候表格标题头显示不出来
可以去掉文档类型声明试一下:<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
css问题,导入的Js有顺序问题要注意!
7.不联网时s.gif图标显示不出来
因为它默认会到extjs的主页上寻找s.gif.我们可以修改ext-base.js BLANK_IMAGE_URL为本地图片路径
也可以在应用中直接加一行:Ext.BLANK_IMAGE_URL = '/youProjectName/resources/images/default/s.gif'; // 替换默认的空白图片
8.TabPanel不能添加右键菜单,也不能自动伸缩?
要想解决这样的问题,我们需要引入TabCloseMenu.js,然后在我们的TabPanel里面加一个属性plugins: new Ext.ux.TabCloseMenu()
9.表单提交url : 'house.do?param=add',在服务器端得不到参数param的值?
注意将stanrdSubmit : true去掉,因为默认它采用get方式提交。而get方式会覆盖?后面带的参数!
10.分页工具栏上如何可以定制每页显示的记录数?
要想解决这样的问题,我们可以从ext的官方论坛上下载一个扩展的插件pager.js,引入它,然后在我们的PagingToolbar 里面加一个属性plugins : new Ext.ux.Andrie.pPageSize()
11.查询表单和我们扩展的分页控件每页显示条数不一致怎么办?
我们可以借助服务器端的session区域对象保存查询表单加上PagerToolbar的一些属性,譬如cursor属性指它的游标指针(当前记录数),pageSize属性是每页的条数,store.getTotalCount是总记录数,来达到要求!
上面是我在做这个ExtJS应用时的遇到的一些小问题,和大家共同分享一下!如果大家还遇到其它细节问题,可以给我留言!