今天在寫struts2 save的時候報了這么一個異常
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進行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>
|
大家注意<s:textfield/>中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中模型驅動對象的名字一致否則就會報錯