SSH开发总结

(1)Spring的引用bean在action中不能定为private,而是要定义为public
(2)hibernate自动产生的实体bean和配置文件要在hibernate.xml配置文件中导进来!
(3)若接口没有被成功注入,可尝试将接口对象重新改名,产生set和get器,或者直接采用自动注入方式即在该接口的对象上面输入@Autowired即可(不用在spring配置文件中写很多property值)。
jdbc:jtds:sqlserver://168.168.172.80:1433/supplier
holpe/holpe20080801
(4)在tomcat的D:\apache-tomcat-6.0.20\conf\Catalina目录下删除不用的工程,那么在启动时就不会再把不用的工程加进来了!
(5)字符串转换成日期类型:
SimpleDateFormat sdf=new SimpleDateFormat( "yyyy-MM-dd");
java.sql.Date getBDate=new java.sql.Date(sdf.parse("2010-11-10").getTime()); //util的日期转换成sql的日期方法
(6)日期转换成字符串
java.text.SimpleDateFormat formatter = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm");
java.util.Date currentTime = new java.util.Date();
String current_time = formatter.format(currentTime); //将日期时间格式化
(7)jsp页面文本框input 中若有disabled="disabled" 属性,则在action中获取不到input的value值.可改为readonly属性!
(8)如果result 的返回类型是redirectAction,那么在跳转的action不能带有.action(有时也可以带.action),否则会此action传的参数不能被获取到!若返回类型是redirect,那么在跳转的action要带有.action.
(9)若某个实体bean报错:failed to lazily initialize a collection of role,那么可以尝试将该实体bean的set属性加上lazy=false;
(10)若spring手工注入的对象没有注入成功,即报空指针异常,那么可以尝试将自动通过@Autowired来自动注入某接口对象,但一般情况是通过ref手工来指定某个注入对象。若还是不行,那么可以尝试将struts配置文件中<action class值和spring配置文件中的<bean id值相同
(11)页面加载时focus--> <body οnlοad="document.all['supContactInfo.contactName'].focus()"/>
(12)异常:The given object has a null identifier,那么说明在更新此对象之前,该对象的主键(自增长的)为null.
(13)IOException while loading persisted sessions: java.io.EOFException,那么将work下面的文件清空;
(14)Hibernate三种状态区分:
a、瞬时态(Transient):由new关键字在内存中孤立存在,不和数据库中的数据有任何关联,也不具有数据库识别值。可通过session的save()或saveOrUpdate()方法转变成持久化对象(即PO).
b、持久化态(Persistent):与数据库中的数据有关联,并且有一个与数据库关联的记录(或识别标识),可通过session的delete()转变成瞬时对象(即VO).
c、脱管态(Detached):当session执行close()或clear()、evict()方法后,PO对象就转变成脱管态(也即VO),当然也可通过update()或saveOrUpdate()等方法转变成持久化对象(即PO),与瞬时态唯一不同的是脱管态多了一个数据库记录标识值。
(15)PO与POJO区别:
POJO是普通的Java对象,不同于EJB,POJO是由new创建的,并由GC垃圾回收器在适当的时候回收,而PO是由数据库insert创建,并由数据库delete删除的,PO生命周期和数据库密切相关的,一旦数据库Connection关闭以后,PO就不存在了,而POJO只要不被GC回收,总是存在的!
(16)JPA技术:
包括三个方面:(a)ORM映射:是将实体对象持久化到数据库表中。
(b)API,操作实体对象,在后台替我们完成所有的CRUD操作,从繁琐的JDBC和SQL代码中解脱出来。
(c)查询语言:通过面向对象而非面向数据库的查询语言来查询数据,避免程序的SQL语句紧密耦合。
好处:可以独立于容器之外运行,变得非常简单
(17)Myeclipse6.5中导struts2包:commons-logging-1.0.4.jar,freemarker-2.3.8.jar,ognl-2.7.3.jar,struts2-core-2.1.8.1.jar,xwork-core-2.1.6.jar
任何Eclipse版本都不支持struts2,但不影响到struts2的开发,导入上面5个包即可!
(18)文件点击下载时显示.zip压缩文件格式的解决方法:(或是如何打开office2007的.docx或.xlsx格式)
<mime-mapping>
<extension>docx</extension>
<mime-type>application/vnd.openxmlformats-officedocument.wordprocessingml.document</mime-type>
</mime-mapping>
把这段xml加入到Tomcat下的 web.xml 中就OK
(19)NHibernate "Illegal attempt to associate a collection with two open sessions" 错误解决办法:
原因是因为所要更新或添加的实体bean中存在着一对多的关系,可将该实体bean下的set中的属性赋为null,然后再调用update或Add方法
一对多的实体bean在update时,最后还得给一对多的关系实体bean赋null值,否则会报:Illegal attempt to associate a collection with two open sessions
删除时可以不用给一对多的关系实体bean赋null值!
(20)对于A表和B表是一对多的关系bean,若要删除A表数据,并同时想删除B表与之关联的数据,那么可以在A实体bean中的set属性中加上:cascade="all-delete-orphan",就可以直接传一个实体A的对象并传到delete方法中即可!
若要删除B表数据,可直接传一个B实体对象,并传到delete方法中即可!
如果要删除的实体bean中不存在一对多的关系,那么就可以将获取的该项实体bean直接传到DAO的delete方法!
(21)若在A表中有一个外键,它又是另外表B的主键,即A表中存在多对一的关系,那么若查出了A实体bean,那么可直接用A实体bean的get方法获取B实体对象!
(22)关于java.lang.Integer cannot be cast to java.lang.Long的 解决是:
1.网上的方法 觉得不太好
view plaincopy to clipboardprint?
public Integer getUsersCount() {
String hql = "select count(*) from Users";
List list = super.pageQuery(hql, null, null, null);
Number num = (Number) list.get(0);
return num.intValue();
}

注:java.lang.Number是Integer,Long的父类.
2.我的方法
Object obj =session.createQuery(getcount).list().get(0);
long count= (Long)obj;
Page page = new Page(pageNum,(int)count,pageSize);

(23)Tomcat在启动时报:IOException while Loading persisted session:java.io.EOFException异常处理:
清理Tomcat下的work文件(local文件)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值