今天在写struts2 save的时候报了这么一个异常
java.lang.illegalargumentexception: attempt to create saveorupdate event with null entity
at org.hibernate.event.saveorupdateevent.(saveorupdateevent.java:40)
at org.hibernate.event.saveorupdateevent.(saveorupdateevent.java:23)
at org.hibernate.impl.sessionimpl.save(sessionimpl.java:518)
at org.hibernate.impl.sessionimpl.save(sessionimpl.java:514)
|
从上面的异常信息可以看出是在hibernate进行save的时候检测到bean为null
1) 大致从这几个方面来分析原因:
2) hibernate(*.hbm.xml)映射文件是否错误
3) dao层代码是否错误
4) 检查action及视图层jsp页面等
从上面几个逐个检查后得出的结论为第四条
首先看action中的代码
private employee employee;
public employee getemployee() {
returnemployee;
}
publicvoid setemployee(employee employee) {
this.employee = employee;
}
|
这里employee是我们观察的重点
再看jsp中的代码
<s:form action="saveemployee.action">
<s:textfield name="empname" label="empname">s:textfield>
<s:textfield name="age" label="age">s:textfield>
<s:textfield name="sex" label="sex">s:textfield>
<s:textfield name="context" label="context">s:textfield>
<s:submit value="注册" theme="simple">s:submit>
<s:reset value="取消" theme="simple">s:reset>
s:form>
|
大家注意中name属性的值
很显然错误发生在此处修改如下即可:
<s:form action="saveemployee.action">
<s:textfield name="employee.empname" label="empname">s:textfield>
<s:textfield name="employee.age" label="age">s:textfield>
<s:textfield name="employee.sex" label="sex">s:textfield>
<s:textfield name="employee.context" label="context" value="">s:textfield>
<s:submit value="注册" theme="simple">s:submit>
<s:reset value="取消" theme="simple">s:reset>
s:form>
|
由此我们得出的结论是:
在jsp页面中一定要保持页面中各个控件的name属性与action中模型驱动对象的名字一致否则就会报错