今天在寫struts2 save的時(shí)候報(bào)了這么一個(gè)異常
java.lang.IllegalArgumentException: attempt to create saveOrUpdate event with null entity
at org.hibernate.event.SaveOrUpdateEvent.<init>(SaveOrUpdateEvent.java:40)
at org.hibernate.event.SaveOrUpdateEvent.<init>(SaveOrUpdateEvent.java:23)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:518)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:514)
|
從上面的異常信息可以看出是在Hibernate進(jìn)行save的時(shí)候檢測(cè)到bean為null
1) 大致從這幾個(gè)方面來(lái)分析原因:
2) Hibernate(*.hbm.xml)映射文件是否錯(cuò)誤
3) DAO層代碼是否錯(cuò)誤
4) 檢查Action及視圖層jsp頁(yè)面等
從上面幾個(gè)逐個(gè)檢查后得出的結(jié)論為第四條
首先看Action中的代碼
private Employee employee;
public Employee getEmployee() {
returnemployee;
}
publicvoid setEmployee(Employee employee) {
this.employee = employee;
}
|
這里employee是我們觀察的重點(diǎn)
再看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="注冊(cè)" theme="simple"></s:submit>
<s:reset value="取消" theme="simple"></s:reset>
</s:form>
|
大家注意<s:textfield/>中name屬性的值
很顯然錯(cuò)誤發(fā)生在此處修改如下即可:
<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="注冊(cè)" theme="simple"></s:submit>
<s:reset value="取消" theme="simple"></s:reset>
</s:form>
|
由此我們得出的結(jié)論是:
在jsp頁(yè)面中一定要保持頁(yè)面中各個(gè)控件的name屬性與Action中模型驅(qū)動(dòng)對(duì)象的名字一致否則就會(huì)報(bào)錯(cuò)