点击显示页面里的“删除”时根据页面传进来的参数去删除数据库对应的数据的
错误如下:
javax.servlet.ServletException: java.lang.IllegalArgumentException: id to load is required for loading
org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:523)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
bug.util.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:89)
root cause java.lang.IllegalArgumentException: id to load is required for loading
org.hibernate.event.LoadEvent. <init>(LoadEvent.java:51)
org.hibernate.event.LoadEvent. <init>(LoadEvent.java:33)
org.hibernate.impl.SessionImpl.load(SessionImpl.java:778)
org.hibernate.impl.SessionImpl.load(SessionImpl.java:774)
bug.dao.imp.BugDAOImp.deleteBugByID(BugDAOImp.java:39)
bug.web.struts.action.DeleteBug.execute(DeleteBug.java:50)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
bug.util.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter 据说这个是表单里面没有把参数传过来的错误
我是在一个显示页面里指向一个请求处理的,然后请求处理取得数据库的内容并返回显示页面,处理的部分程序如下:
public void listpage(HttpServletRequest request, JspWriter out, int page)
throws Exception { String id = "", sta = "", pha = "", cat = "";
bugDao = this.getBugDAO();
List list = bugDao.getBug();
if (list == null) {
out.print("暂无信息");
return;
}
int total = list.size();
int count = 0;
//取得list迭代器
Iterator it = list.iterator();
Bug bug;
while (count < (page - 1) * 10 && it.hasNext()) {
it.next();
count++;
}
count = 0;
while (it.hasNext() && count < 10) {
bug = (Bug) it.next(); id = bug.getId();
sta = bug.getSta();
pha = bug.getPha();
cat = bug.getCat();
if (sta == null || sta.equals(""))
sta = "无";
if (pha == null || pha.equals(""))
pha = "无";
if (cat == null || cat.equals(""))
cat = "无"; out.print("<tr><td><a href=list.do?id=" + id + ">"+id+"</a></td><td>" + sta + "</td><td>"
+ pha + "</td><td>" + cat + "</td><td>");
out.print("<a href=DeleteBug.do?id="
+ bug.getId() + ">删除</a></td><td>");
count++;
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DAO的删除方法如下:
public boolean deleteBugByID(String id) {
try {
Session s = HibernateUtil.currentSession();
//HibernateUtil.beginTransaction();
Bug bug=new Bug();
bug= (Bug) s.load(Bug.class, bug.getId());
HibernateUtil.commitTransaction();
System.out.println(bug.getId());
HibernateUtil.beginTransaction();
s.delete(bug);
HibernateUtil.commitTransaction();
HibernateUtil.closeSession();
return true;
} catch (HibernateException e) {
log.fatal(e);
}
return false;
}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Action如下:
public class DeleteBug extends Action {
private BugDAO bugDao; public BugDAO getBugDAO() {
return DAOFactory.getInstance().createBugDAO();
} /**
* Method execute
*
* @param mapping
* @param form
* @param request
* @param response
* @return ActionForward
*/
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {// ActionMessages errors = new ActionMessages();
String id =request.getParameter("id");
bugDao = this.getBugDAO();
if(!bugDao.deleteBugByID(id)){
return (mapping.getInputForward());
}
return (mapping.findForward("deleteBugSuccess"));
}}
错误如下:
javax.servlet.ServletException: java.lang.IllegalArgumentException: id to load is required for loading
org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:523)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
bug.util.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:89)
root cause java.lang.IllegalArgumentException: id to load is required for loading
org.hibernate.event.LoadEvent. <init>(LoadEvent.java:51)
org.hibernate.event.LoadEvent. <init>(LoadEvent.java:33)
org.hibernate.impl.SessionImpl.load(SessionImpl.java:778)
org.hibernate.impl.SessionImpl.load(SessionImpl.java:774)
bug.dao.imp.BugDAOImp.deleteBugByID(BugDAOImp.java:39)
bug.web.struts.action.DeleteBug.execute(DeleteBug.java:50)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
bug.util.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter 据说这个是表单里面没有把参数传过来的错误
我是在一个显示页面里指向一个请求处理的,然后请求处理取得数据库的内容并返回显示页面,处理的部分程序如下:
public void listpage(HttpServletRequest request, JspWriter out, int page)
throws Exception { String id = "", sta = "", pha = "", cat = "";
bugDao = this.getBugDAO();
List list = bugDao.getBug();
if (list == null) {
out.print("暂无信息");
return;
}
int total = list.size();
int count = 0;
//取得list迭代器
Iterator it = list.iterator();
Bug bug;
while (count < (page - 1) * 10 && it.hasNext()) {
it.next();
count++;
}
count = 0;
while (it.hasNext() && count < 10) {
bug = (Bug) it.next(); id = bug.getId();
sta = bug.getSta();
pha = bug.getPha();
cat = bug.getCat();
if (sta == null || sta.equals(""))
sta = "无";
if (pha == null || pha.equals(""))
pha = "无";
if (cat == null || cat.equals(""))
cat = "无"; out.print("<tr><td><a href=list.do?id=" + id + ">"+id+"</a></td><td>" + sta + "</td><td>"
+ pha + "</td><td>" + cat + "</td><td>");
out.print("<a href=DeleteBug.do?id="
+ bug.getId() + ">删除</a></td><td>");
count++;
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DAO的删除方法如下:
public boolean deleteBugByID(String id) {
try {
Session s = HibernateUtil.currentSession();
//HibernateUtil.beginTransaction();
Bug bug=new Bug();
bug= (Bug) s.load(Bug.class, bug.getId());
HibernateUtil.commitTransaction();
System.out.println(bug.getId());
HibernateUtil.beginTransaction();
s.delete(bug);
HibernateUtil.commitTransaction();
HibernateUtil.closeSession();
return true;
} catch (HibernateException e) {
log.fatal(e);
}
return false;
}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Action如下:
public class DeleteBug extends Action {
private BugDAO bugDao; public BugDAO getBugDAO() {
return DAOFactory.getInstance().createBugDAO();
} /**
* Method execute
*
* @param mapping
* @param form
* @param request
* @param response
* @return ActionForward
*/
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {// ActionMessages errors = new ActionMessages();
String id =request.getParameter("id");
bugDao = this.getBugDAO();
if(!bugDao.deleteBugByID(id)){
return (mapping.getInputForward());
}
return (mapping.findForward("deleteBugSuccess"));
}}
try {
Session s = HibernateUtil.currentSession();
//HibernateUtil.beginTransaction();
Bug bug=new Bug();
bug= (Bug) s.load(Bug.class, bug.getId()这里还有必要怎么取么直接用id);
HibernateUtil.commitTransaction();
System.out.println(bug.getId()这里也是);
HibernateUtil.beginTransaction();
s.delete(bug);
HibernateUtil.commitTransaction();
HibernateUtil.closeSession();
return true;
} catch (HibernateException e) {
log.fatal(e);
}
return false;
}
Bug bug=new Bug(); //去掉
bug= (Bug) s.load(Bug.class, bug.getId());改成 bug= (Bug) s.load(Bug.class, id);//根据你的类型 可能是 int ,可能是long
bug= (Bug) s.load(Bug.class, bug.getId());
====================================================
bug是新new出来的object,接着去getId()的话肯定是没东东了,
换成id就可以了。
如果我的数据类型是String型的呢?
你现在是要根据主键ID查找记录啊
Session s = HibernateUtil.currentSession();
//HibernateUtil.beginTransaction();
//Bug bug=new Bug();这个删掉
bug= (Bug) s.load(Bug.class, id);
HibernateUtil.commitTransaction();
这样就行了 这个方法一定要是根据主键查才行的
Bug bug=new Bug();
bug= (Bug) s.load(Bug.class, id);
这个的意思就是把主键ID等于id的Bug对象查出来附给一个新的bug对象
java.lang.NullPointerException
org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:372)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:229)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
bug.util.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter空指针???传进去的对象没有?大家看清楚我在action里是有这句的:String id =request.getParameter("id");
可为什么传不进去对象呢?我在这句的上面和下面都作了断点,上面可以打印,下面不行,证明是这句出了问题
原先的那句是这样的String id =(String)request.getParameter("id");
但我的id本来就是String所以就去掉了(String),不过加回来也是同样的错误,哎~