`

Struts2 + Hibernate + Spring 以及javaweb模块问题解决(2)

阅读更多

40.IE和火狐浏览器 对于JavaScript的支持:

qq书签中录入了很多关于ie和火狐对于JavaScript的区别,等等不再赘述。在项目中遇到的问题记录下来。

Document.getElementByID(“XX”).value ie,火狐中都可行。

在火狐中,jsp页面中用到了dojo框架时,在文本框的格式中采用了numberspinner这个形式时,在火狐中使用传统的document.XX.XX.value,并不能把值传到JavaScriptfunction函数中,唯有通过Document.getElementByID(“XX”).value方可。

41.关于hibernate延迟加载的异常 no session or session is closed

同样在qq书签中收入了很多关于此异常和关于hibernate延迟加载机制的网址。

关于这个异常,是在延迟加载中,简单的理解就是当session已经关闭后,又出现了hibernate试图通过session从数据库中加载实际的数据集,所以报出session已关闭的错误。

 但是如果我们采用了延迟加载机制,希望在一些情况下,实现非延迟加载时的功能,在提供一个完整的Bspinq对象时,把所关联的bspInqParts 信息在session关闭之后仍然可以使用。这就要采用hibernate.initialize方法,可以通过强制加载关联对象来实现这一功能。

Hibernate.initialize(inq.getBspInqParts());

Session.close();  搞定。

42. 为了实现透明化的延迟加载机制,hibernate进行了大量努力。其中包括JDK Collection接口的独立实现。

     如果我们尝试用HashSet强行转化Hibernate返回的Set 型对象:

Set hset = (HashSet)user.getAddresses();

就会在运行期得到一个java.lang.ClassCastException, 实际上,此时返回的是一个Hibernate的特定Set实现“net.sf.hibernate.collection.Set”对象,而非
传统意义上的JDK Set实现。这也正是我们为什么在编写POJO时,必须用JDKCollection 接口(如Set,Map, 而非特定的JDKCollection 实现类(如HashSetHashMap)申明Collection属性的原因。

43.验证码刷新显示问题:

在项目中验证码的刷新显示困扰了我很久,在近期得以解决。

在使用action的方法中 return null;(若return input;会有异常抛出,故下文中的src图片定位选择了用servlet进行,但缺点是servlet被执行了两遍,在以后的项目中寻求变化)

servlet配置中为了防止被action过滤,Uri-pattern 改为VImage.jsp

JavaScript中的src定义图片的显示时用servlet’VImage.jsp’ +’ ?’ + Math.random();(使用随机数是为了保证刷新出来的图片不一样)

44. Unable to find 'struts.multipart.saveDir' property setting

今天在写项目的时候出现了一个这样的错误,不知道是怎么回事,后来在网上找资料发现了解决方法:

struts.multipart.saveDir没有配置。

struts.multipart.saveDir用于指定存放临时文件的文件夹,该配置写在struts.properties文件中。例如,如果在struts.properties文件加入如下代码:

struts.multipart.saveDir = /tmp

45. MyEclipse 8.x 关闭自动更新的问题.

 1. Window --> Preferences --> General --> Startup and Shutdown -->找到"Automatic Updates Scheduler " 项去掉前面的勾。(不要看上面三个复选框,要在下面列表框里面靠下面一点找到)####重点注意下!!!

2. Window --> Preferences --> Myeclipse Enterprise Workbench --> Maven4Myeclipse --> Maven --> "Download repository index updates on startup"
去掉前面的勾。

46.input标签之中disable的注意:

  如果<input type="text" name="productVO.type" disabled id="producttype" size="30" />存在disabled属性,那么后台action是不能接收到productVO.type的值的,去掉disabled即可。

47.hidden类型标签

hidden类型的标签,在javascript中是不能做焦点判断的。

48.ckeckbox js 全选功能name命名问题:

jsp中,当做checkbox全选功能时,其name不能命名为“XXXVO.name,因为在js中用document.getElementsById(XXX)时,只能选中一个,而不能像name那样可以全部选中。

49.如同48:

jsp中,当做checkbox全选功能时,在js中用var user = document.forms[0].userid,当对象为多个时,user取出的是数组,而当对象为一个时,user取出的并不是数组,所以在做全选时,应该对user.length进行判断if(user.length),如果不是数组user.length返回false,再对其进行操作。

50.在sever中,关闭掉浏览器,重开之后,session丢失原因:

重新开浏览器之后,会发现原来的session会丢失,其实session在sever并没有丢失,而是重开浏览器之后session的id变了,所以浏览器会找不到session。解决办法:利用cookie将原先session的id保存进Map中,在重开浏览器之后,再通过cookie把map中的sessionId找到,然后通过id把原先session对象取出(这一步可以通过sessionListener实现)。

sessionListener主要是监听session对象的创建与销毁,当监听session创建时,通过create方法把session记入自己定义的Map对象中。通过自己定义的相应方法可以把session从Map中取出。当session销毁时,通过destroy方法把session从Map中删除,否则会造成内存的泄露。

51.通过把JSESSIONID放入cookie中,在action中会通过request.getsession自动找到原来的session。

 

不断更新总结中。。。 如有差错,欢迎批评指正。。。

1
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics