1、项目更新文件的时候一定要删除服务器对jsp预编译生成的文件目录。(例如在resin下就是:webapps/项目目录/WEB-INF/work)否则可能产生一些很隐蔽的问题,例如,你的JSP页面引用了一个其他类的静态常量,而你修改了这个静态常量的值,项目更新的时候,你更新了常量文件的class文件,没有更新JSP文件。这时候你访问这个JSP页面,得到的常量还是原先的值。因为resin服务器认为这个JSP没有修改,所以不对它进行重新编译,还是使用原来预编译的文件。
2、Struts2配置result结果类型为redircetAction(早期版本为redirect-action)时,不能加action的后续,否则将接收不到通过URL传递过去的参数。
3、如果向后台提交的数据有中文,那么最好使用post方式提交表单,否则可能会产生乱码问题。
4、一直以为js的onchange是实时比较输入框的内容而触发的,现在才发现是改变内容,并且失去焦点才触发。
5、response.getWriter().write();方法可以接受String、int等多种类型的参数,但是如果使用AJAX来获取后台传递过来的字符串时,最好使用String类型,如果使用int等其他类型,会导致JS将接受的参数解析为乱码。
6、在页面上用JS拼接字符串时如果使用了"|"(竖线),那么在后台分拆的时候不能简单地split("|");,这样会导致其将每个字符拆分成一个元素,因为"|"在Java的正则表达式里有特殊含义。所以必须转义,使用"\\|"即可。
7、SQL SERVER 中的Case when 判断,当前边的When中的条件为“真”时,就不会进行下边的When的判断了。
例如:
select case when 1 = 1 then 1
when 2 = 2 then 2
end
这个语句返回的是1,
而这个语句:
select case when 2 = 2 then 2
when 1 = 1 then 1
end
则返回2。
因为Case When的顺序可能对查询结果产生很大的影响,在写SQL时要特别注意。
8、当使用Hibernate的命名查询,直接使用原生SQL来查询的话,一定要保证每一个列都有一个唯一的名称或别名。如:
select id, isnull(num, 0), isnull(price, 0) from 表名
这里有两项是没有名称的,那么Hibernate在执行的时候能找到"num" 列的值,但是找不到name字段的值,例如id = 1, num = 10, price = 100,那么使用Hibernate查询的结果将是 1 10 10
如果是:select id, isnull(num, 0) as num, isnull(price, 0) as price from 表名 则查询结果将是正确的:1 10 100
如果所有项都没有名称,那么查询就可能会报错了。
(将工作中遇到的问题总结下来,以备查看。未完待续。)