1.严重: IOException while loading persisted sessions: java.io.EOFException
严重: Exception loading sessions from persistent storage
突然之间,tomcat重启的时候老是报这个错,查了一下,
原因:EOFException表示输入过程中意外地到达文件尾或流尾的信号,导致从session中获取数据失败。异常是tomcat本身的问题,由于tomcat上次非正常关闭时有一些活动session被持久化(表现为一些临时文件),在重启时,tomcat尝试去恢复这些session的持久化数据但又读取失败造成的。此异常不影响系统的使用。
解决方法:删除Tomcat里面的work/Catalina/localhost下的内容即可解决,几乎每个工程都有,可以全部删除也可以只删除特定工程的,主要是.ser文件惹的祸
2.store.load()方法中,有参数和无参数的区别
刚才发现一个有趣的事情,就是load方法,有参数时是用post方式提交后台的,没有参数时居然是用get方式提交的,有图为证
store.load({params:{start:0, limit:10}});
store_scope.load();
3.在EditorGridPanel中添加一行
这个搞了我好半天才搞好,如下代码:
xtype:"button",
text:"添加",handler:function(){
var stores = gridPanel.getStore();
var recordType = gridPanel.getStore().recordType;
var obj = {
idReg:"",
enterprise:"",
name:"",
idCard:"",
address:"",
telephone:"",
setup:"",
capital:"",
scope:"",
nature:"",
matter:""
};
var data = new recordType(obj);
gridPanel.stopEditing();
stores.insert(0, data);
stores.sort();
//设置脏数据
data.dirty = true;
//只要一个字段值修改了,该行的所有值都设置成脏标记
data.modified = obj;
if (gridPanel.getStore().modified.indexOf(data) == -1) {
gridPanel.getStore().modified.push(data);
}
gridPanel.getView().refresh();
gridPanel.startEditing(0, 0);
}
但是搞好之后,我发现无法像数据库中那样一行一行的编辑,只能一个单元格一个单元格的添加,虽说是最后一起提交的,再加上还有一个文本单元格,不太适合于这样添加,于是果断放弃这种添加方法,采用window formPanel,在这里先记下这个代码,后面有适合的时候再用这种功能吧,连说话写文章都讲究用词的变化,何况编系统呢
4.jsp或者html页面加载js文件出错
以前涉及到js文件的时候都是各个js之间没有关联的,所以加载的时候就直接src="js/*.js",可是这一次居然出错,突然发现,这一次的js文件都是相互嵌套的,因此加载的顺序问题就非常重要了,这也证明了页面加载js文件的方式就是自上而下,依次加载
5.HTTP Status 404 - No result defined for action com.shiep.action.BasicInfoAction and result input
想必做过jsp的人对于这个异常是非常熟悉的,一般在jsp中表面上就是struts配置文件里真的没有result input标签,然而深层次的原因却是保存的数据在后台发生异常,只是在我们修改了配置文件的时候,它就跳到input页面了,就不在报异常了,但是错误还是没有解决。然而,在ExtJs中碰到这种异常的时候,如果不从深层次解决问题,你想跳都没地方跳,这个时候最有效的方法就是把非string类型的不要传到后台,然后测试,如果通过就说明是非string类型的变量传到后台之后格式不正确,这个时候再进行适当的转换就可以了;如果不通过,这就说明你的代码在逻辑上就有错误,而不是格式出错那么简单了
6.刷新功能store.load()和gridPanel.getView().refresh();的区别
在做可编辑表格的更新的时候,发现更新之后居然显示的是外键的id而不是外键的value,也说明更新提交之后页面没有去做关联查询,于是想到了刷新,可是在ExtJs中说刷新,总归给人一种不爽的感觉,因为ExtJs就是基于Ajax的,异步刷新,但是有时候为了性能方面的考虑就需要放弃一些了,比如这个需要关联查询的例子,refresh()本来就是刷新的意思,但是这个刷新不会去做关联查询的,是视图级别的刷新,而load()严格来说不能说是刷新,而是重新加载数据而已,这个时候就看Hiberate的控制了,如果没有延迟加载的话,就会马上去做关联查询
7.combobox往后台传值,居然传过去的是displayField,而不是valueField
这个问题有两种方法:第一种,直接在js页面获取到value之后再传到后台,如下:
function(){
var value = obj.value;
}
第二种方法:把name属性改成hiddenname属性,这是因为在combobox中那么对应
displayField,而hiddenname则对应
valueField,而我们往后台传的往往是
valueField。
8.循环添加数据到数据库
这几天调试基础表的增删改,有11个字段,测试的时候需要许多数据,这要是手动添加会死人的,于是找了一段oracle下的循环添加模版,大家可以根据自己的表来改一下,如果数据库字段很多的话,可以先导出为.sql文件,此文件中有插入语句,直接复制
declare
maxrecords constant int:=1000;
i int :=1;
begin
for i in 1..maxrecords loop
insert into UserInfo(UserID,login,password,firstName,lastName,ISADMINISTRATOR)
values(SYS_GUID(),TO_CHAR('9999'+i),'password','fristname','lastName','0');
end loop;
dbms_output.put_line(' 成功录入数据! ');
commit;
end;
9.java.lang.OutOfMemoryError: Java heap space
哈哈,刚才还在得意可以不用手动添加数据了,结果手贱,一口气让程序循环了100次,插入了100条数据,然后findall,然后......就没有然后了,直接内存溢出。网上查了一下,原因如下:
Heap size 设置
JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置.JVM在启动的时候会自动设置Heap size的值,
其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。可以利用JVM提供的-Xmn -Xms -Xmx等选项可
进行设置。Heap size 的大小是Young Generation 和Tenured Generaion 之和。
提示:在JVM中如果98%的时间是用于GC且可用的Heap size 不足2%的时候将抛出此异常信息。
提示:Heap Size 最大不要超过可用物理内存的80%,一般的要将-Xms和-Xmx选项设置为相同,而-Xmn为1/4的-Xmx值。
解决方法:手动设置Heap size
修改TOMCAT_HOME/bin/catalina.sh
在“echo “Using CATALINA_BASE: $CATALINA_BASE””上面加入以下行:
JAVA_OPTS=”-server -Xms800m -Xmx800m -XX:MaxNewSize=256m”
简单一点的可以直接在myeclipse里设置,如下:
不过说到底,这种方法治标不治本,根本的方法还是要优化查询,优化hibernate,采取分页等办法