最近在开发Spring+Hibernate+Struts整合开发的时候遇到几次这个异常,故记之。
除了网上说的:
jsp页面中各个控件的name属性与Action中模型驱动对象的名字不一致原因之外,还有一个不起眼的原因,不过不注意也可能发生。
我就发生了两次。就是在Action的代码里面缺少set方法。
例如:
package com.hugehard.campussecond.action;
import java.util.List;
import com.hugehard.campussecond.model.Catagory;
import com.hugehard.campussecond.service.CatagoryManager;
import com.hugehard.campussecond.util.Const;
import com.opensymphony.xwork2.ActionSupport;
public class CatagoryAction extends ActionSupport {
private CatagoryManager catagoryManager;
private Integer id;
private Catagory catagory;
private List<Catagory> catagorys;
private static final long serialVersionUID = 1L;
public void setCatagoryManager(CatagoryManager catagoryManager) {
this.catagoryManager = catagoryManager;
}
public Catagory getCatagory() {
return catagory;
}
public void setCatagory(Catagory catagory) {
this.catagory = catagory;
} //注意这儿,如果忘了set它就会出现上述错误。在调用add方法的时候。
public List<Catagory> getCatagorys() {
return catagorys;
}
public void setCatagorys(List<Catagory> catagorys) {
this.catagorys = catagorys;
}
public CatagoryManager getCatagoryManager() {
return catagoryManager;
}
public String load() {
if (id == null)
catagory = catagoryManager.get(id);
return SUCCESS;
}
public String add(){
catagoryManager.insert(catagory);
return SUCCESS;
}
public String update() {
catagoryManager.update(catagory);
return SUCCESS;
}
public String delete() {
if (id == null)
catagoryManager.delete(id, Const.UNSORTED_ID);
return SUCCESS;
}
public String list() {
catagorys = catagoryManager.list();
return SUCCESS;
}
}
除此之外,还有一个情况,刚刚发现的,也是太粗心了:
<!-- 分类管理 -->
<action name="listCatagorys" class="catagoryAction"
<!-- 注意这儿,看下面我写了一个addCatagory,成功之后转向listCatagorys,而我之前在listCatagorys里写的是method="add",而正确的是list,如//果是add的话出现的效果就是,数据库里面的确也添加进东西了,但是转到xx/listCatagorys之后却又来一个null entity异常。--!>
method="list">
<result name="success">/admin/listCategorys.jsp</result>
</action>
<action name="addCatagory" class="catagoryAction"
method="add">
<result name="success" type="redirect">/admin/listCatagorys</result>
</action>
<action name="editCatagory" class="catagoryAction"
method="load">
<result name="success" type="redirect">/admin/listCatagorys</result>
</action>
<action name="updateCatagory" class="catagoryAction"
method="update">
<result name="success" type="redirect">/admin/listCatagorys</result>
<result name="input" type="redirect">/admin/listCatagorys</result>
</action>