2,100
社区成员
发帖
与我相关
我的任务
分享
Type Exception Report
Message attempt to create saveOrUpdate event with null entity
Description The server encountered an unexpected condition that prevented it from fulfilling the request.
Exception
java.lang.IllegalArgumentException: attempt to create saveOrUpdate event with null entity
org.hibernate.event.spi.SaveOrUpdateEvent.<init>(SaveOrUpdateEvent.java:45)
org.hibernate.event.spi.SaveOrUpdateEvent.<init>(SaveOrUpdateEvent.java:28)
org.hibernate.internal.SessionImpl.save(SessionImpl.java:671)
org.hibernate.internal.SessionImpl.save(SessionImpl.java:666)
edu.gdut.shoppingmall.dao.impl.ReaderDAO.create(ReaderDAO.java:27)
edu.gdut.shoppingmall.business.ebo.ReaderEBO.create(ReaderEBO.java:19)
edu.gdut.shoppingmall.actions.ReaderAction.add(ReaderAction.java:41)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:497)
ognl.OgnlRuntime.invokeMethod(OgnlRuntime.java:899)
ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:1544)
ognl.ObjectMethodAccessor.callMethod(ObjectMethodAccessor.java:68)
com.opensymphony.xwork2.ognl.accessor.XWorkMethodAccessor.callMethodWithDebugInfo(XWorkMethodAccessor.java:98)
com.opensymphony.xwork2.ognl.accessor.XWorkMethodAccessor.callMethod(XWorkMethodAccessor.java:90)
ognl.OgnlRuntime.callMethod(OgnlRuntime.java:1620)
ognl.ASTMethod.getValueBody(ASTMethod.java:91)
ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)
ognl.SimpleNode.getValue(SimpleNode.java:258)
ognl.Ognl.getValue(Ognl.java:470)
ognl.Ognl.getValue(Ognl.java:434)
com.opensymphony.xwork2.ognl.OgnlUtil$3.execute(OgnlUtil.java:374)
com.opensymphony.xwork2.ognl.OgnlUtil.compileAndExecuteMethod(OgnlUtil.java:426)
com.opensymphony.xwork2.ognl.OgnlUtil.callMethod(OgnlUtil.java:372)
com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:438)
com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:293)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:254)
org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:250)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:179)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:99)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:263)
org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:49)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:99)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.doIntercept(ConversionErrorInterceptor.java:142)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:99)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:137)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:99)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:137)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:99)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:201)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:67)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
org.apache.struts2.interceptor.DateTextFieldInterceptor.intercept(DateTextFieldInterceptor.java:133)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:85)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:243)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:101)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:142)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:160)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:175)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:99)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
org.apache.struts2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:121)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:167)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:203)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:196)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
org.apache.struts2.factory.StrutsActionProxy.execute(StrutsActionProxy.java:48)
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:574)
org.apache.struts2.dispatcher.ExecuteOperations.executeAction(ExecuteOperations.java:79)
org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:141)
Note The full stack trace of the root cause is available in the server logs.
public ApplicationModel getAm() {
return am;
}
public void setAm(ApplicationModel am) {
this.am = am;
}
setGm我在其他action里面用了,不知道是不是因为这样就错了,反正改了之后就可以了。
<struts>
<package name="BookManage" namespace="/" extends="struts-default">
<!-- 对书本的操作 -->
<action name="book_*" class="edu.gdut.shoppingmall.actions.GoodsAction" method="{1}">
<result name="success">/list.jsp</result>
<result name="toUpdate">/bookUpdate.jsp</result>
<!-- 后台登陆成功 --><result name="successLogin">/home.jsp</result>
<!-- 后台登陆失败 --><result name="failLogin">/login.jsp</result>
<allowed-methods>regex:.*</allowed-methods>
</action>
<!-- 删除修改 -->
<action name="br_*" class="edu.gdut.shoppingmall.actions.GoodsAction" method="{1}">
<result name="success">/BARlist.jsp</result>
<result name="toUpdate">/bookUpdate.jsp</result>
<allowed-methods>regex:.*</allowed-methods>
</action>
<!-- 对读者的操作 -->
<action name="reader_*" class="edu.gdut.shoppingmall.actions.ReaderAction" method="{1}">
<result name="success">/readerList.jsp</result>
<result name="toUpdate">/readerUpdate.jsp</result>
<allowed-methods>regex:.*</allowed-methods>
</action>
<!-- 对申请表的操作 -->
<action name="application_*" class="edu.gdut.shoppingmall.actions.APLAction" method="{1}">
<result name="success">/RcommendList.jsp</result>
<allowed-methods>regex:.*</allowed-methods>
</action>
<!-- 对借阅归还的操作 -->
<action name="borrow_*" class="edu.gdut.shoppingmall.actions.BARAction" method="{1}">
<result name="success">/borrowList.jsp</result>
<allowed-methods>regex:.*</allowed-methods>
</action>
</package>
</struts>
页面readerAdd.jsp
<%@page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>增加读者</title>
</head>
<body>
<body background="简单.jpg" >
<center><font color="#8080C0" size="20px">增加读者</font></center>
<form action="${pageContext.request.contextPath}/reader_add"" method="post">
<input type="hidden" name="submitFlag" value="add">
<table width="20%" align="center">
<td align="right"><font color="#8080C0">身份证号</font></td>
<td><input type="text" name="rm.id"></input></td>
</tr>
<tr>
<td align="right"><font color="#8080C0">借阅卡号</font></td>
<td><input type="text" name="rm.bno"></input></td>
</tr>
<tr>
<td align="right"><font color="#8080C0">姓名</font></td>
<td><input type="text" name="rm.rname"></input></td>
</tr>
<tr>
<td align="right"><font color="#8080C0">性别</font></td>
<td><input type="text" name="rm.sex"></input></td>
</tr>
<tr>
<td align="right"><font color="#8080C0">联系方式</font></td>
<td><input type="text" name="rm.phone"></input></td>
</tr>
<tr>
<td align="right"><font color="#8080C0">籍贯</font></td>
<td><input type="text" name="rm.concord"></input></td>
</tr>
<tr>
<td align="right"><font color="#8080C0">单位</font></td>
<td><input type="text" name="rm.workunit"></input></td>
</tr>
<tr>
<td align="right"><font color="#8080C0">职称</font></td>
<td><input type="text" name="rm.jtitle"></input></td>
</tr>
<tr>
<td align="right"><font color="#8080C0">邮政编码</font></td>
<td><input type="text" name="rm.postalcode"></input></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" value="保存"></input>
<input type="reset" value="重置"></input>
</td>
</tr>
</table>
</input>
</form>
</body>
</html>
页面readerList.jsp
<%@ page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib uri="/gdut.edu.cn" prefix="gdut"%>
<!DOCTYPE HTML>
<html>
<head>
<meta charset='utf-8'>
<style>
a{font-size:25px;}
</style>
</head>
<body background=简单.jpg>
<center> <font size="20px" color="ff9224">读者信息</font></center>
<jsp:useBean id="pb" class="edu.gdut.shoppingmall.common.mytaglib.PageBean" scope="session"/>
<jsp:setProperty property="currPage" name="pb"/>
<table align='center' width='40%'>
<tr>
<td>身份证号</td>
<td>借阅卡号</td>
<td>姓名</td>
<td>性别</td>
<td>联系方式</td>
<td>籍贯</td>
<td>单位</td>
<td>职称</td>
<td>邮政编码</td>
</tr>
<gdut:page var="rm" list="${result}" pb="${pb}">
<tr>
<td>${rm.id}</td>
<td>${rm.bno}</td>
<td>${rm.rname}</td>
<td>${rm.sex}</td>
<td>${rm.phone}</td>
<td>${rm.concord}</td>
<td>${rm.workunit}</td>
<td>${rm.jtitle}</td>
<td>${rm.postalcode}</td>
<td>
<a href="${pageContext.request.contextPath}/reader_delete?rm.id=${rm.id}">删除</a>
<a href="${pageContext.request.contextPath}/reader_toUpdate?rm.id=${rm.id}">修改</a>
</td>
</tr>
</gdut:page>
</table>
</body>
</html>
求帮忙看下可以吗?找了好久不知道哪里错了
public class ReaderDAO implements RIBaseDAO{
@Override//增加
public boolean create(ReaderModel rm) {
Session session=HbnUtil.getSession();//
session.beginTransaction();
session.save(rm);//
session.getTransaction().commit();//
session.close();
return true;
}
@Override//删除
public boolean delete(String id) {
Session session=HbnUtil.getSession();//
ReaderModel rm=session.load(ReaderModel.class, id);
session.beginTransaction();
session.delete(rm);//
session.getTransaction().commit();//
session.close();
return true;
}
@Override
public ReaderModel findByNum(String id) {
Session session=HbnUtil.getSession();//
ReaderModel gm=session.load(ReaderModel.class, id);
session.beginTransaction();
session.getTransaction().commit();//
session.close();
return gm;
}
@Override
public boolean update(ReaderModel rm) {
Session session=HbnUtil.getSession();//
session.beginTransaction();
session.update(rm);//
session.getTransaction().commit();//
session.close();
return true;
}
@Override
public List<ReaderModel> findAll() {
String hql="from GoodsModel";//
Session session=HbnUtil.getSession();//
session.beginTransaction();
List<ReaderModel>list=session.createQuery(hql).list();
session.getTransaction().commit();//
session.close();
return list;
}
@Override//
public List<ReaderModel> findByCondition(Map<String, String> condition) {
Session session=HbnUtil.getSession();//
session.beginTransaction();
Criteria criteria=session.createCriteria(ReaderModel.class);
Iterator<Entry<String,String>>iter=condition.entrySet().iterator();
while(iter.hasNext()){
Map.Entry<String, String>entry=iter.next();
String key=entry.getKey();
String value=entry.getValue();
if("id".equals(key)){
criteria.add(Restrictions.like("num", value, MatchMode.ANYWHERE));//模糊匹配
}
if("bno".equals(key)){
criteria.add(Restrictions.like("bno", value, MatchMode.ANYWHERE));
}
if("rname".equals(key)){
criteria.add(Restrictions.like("rname", value, MatchMode.ANYWHERE));
}
if("sex".equals(key)){
criteria.add(Restrictions.like("sex", value, MatchMode.ANYWHERE));
}
if("phone".equals(key)){
criteria.add(Restrictions.like("phone", value, MatchMode.ANYWHERE));
}
if("concord".equals(key)){
criteria.add(Restrictions.like("concord", value, MatchMode.ANYWHERE));
}
if("workunit".equals(key)){
criteria.add(Restrictions.like("workunit", value, MatchMode.ANYWHERE));
}
if("jtitle".equals(key)){
criteria.add(Restrictions.like("jtitle", value, MatchMode.ANYWHERE));
}
if("postalcode".equals(key)){
criteria.add(Restrictions.like("bno", value, MatchMode.ANYWHERE));
}
}
List<ReaderModel> list=criteria.list();
session.getTransaction().commit();
session.close();
return list;
}
}
public interface RIBaseDAO {
//读者
boolean create(ReaderModel rm);
boolean delete (String id);
List<ReaderModel> findAll();
ReaderModel findByNum(String id);
boolean update(ReaderModel rm);
List<ReaderModel> findByCondition(Map<String,String>condition);
}
public class ReaderEBO implements ReaderEBI{
@Override
public boolean create(ReaderModel rm) {
RIBaseDAO bdao=DAOfactory.getReaderDAO();
return bdao.create(rm);
}
@Override
public boolean delete(String id) {
RIBaseDAO bdao=DAOfactory.getReaderDAO();
return bdao.delete(id);
}
public boolean update(ReaderModel rm) {
RIBaseDAO bdao=DAOfactory.getReaderDAO();
return bdao.update(rm);
}
public List<ReaderModel> findAll() {
RIBaseDAO bdao=DAOfactory.getReaderDAO();
List<ReaderModel> list=bdao.findAll();
return list;
}
public ReaderModel findByNum(String id) {
RIBaseDAO bdao=DAOfactory.getReaderDAO();
ReaderModel rm=bdao.findByNum(id);
return rm;
}
@Override
public List<ReaderModel> findByCondition(Map<String, String> condition) {
RIBaseDAO bdao=DAOfactory.getReaderDAO();
List<ReaderModel> list=bdao.findByCondition(condition);
return list;
}
@Override
public void sortByNum() {
// TODO Auto-generated method stub
}
}
public interface ReaderEBI {
boolean create(ReaderModel rm);
boolean delete(String num);
boolean update(ReaderModel rm);
List<ReaderModel> findAll();
List<ReaderModel> findByCondition(Map<String,String>condition);
ReaderModel findByNum(String num);
void sortByNum();
}
public class ReaderAction extends ActionSupport{
public ReaderModel rm;
public ReaderModel getGm() {
return rm;
}
public void setGm(ReaderModel rm) {
this.rm = rm;
}
public String display(){
List<ReaderModel>list=EBOFactory.getReaderEBO().findAll();
this.pageHandler(list);
return "success";
}
public String add(){
EBOFactory.getReaderEBO().create(rm);
List<ReaderModel>list=EBOFactory.getReaderEBO().findAll();
this.pageHandler(list);
return "success";
}
public String Rdelete(){
EBOFactory.getReaderEBO().delete(rm.getId());
List<ReaderModel>list=EBOFactory.getReaderEBO().findAll();
this.pageHandler(list);
return "success";
}
public String Rupdate(){
EBOFactory.getReaderEBO().update(rm);
List<ReaderModel>list=EBOFactory.getReaderEBO().findAll();
this.pageHandler(list);
return "success";
}
public String toUpdate(){
ReaderModel ReaderModel=EBOFactory.getReaderEBO().findByNum(rm.getId());
ActionContext context=ActionContext.getContext();
context.getSession().put("ReaderModel", ReaderModel);
return "toUpdate";
}
public String findAll(){
List<ReaderModel>list=EBOFactory.getReaderEBO().findAll();
this.pageHandler(list);
return "success";
}
public String findByNum(String id){
ReaderModel rm = EBOFactory.getReaderEBO().findByNum(id);
ActionContext context=ActionContext.getContext();
context.getSession().put("rm", rm);//锟斤拷锟絞m,锟斤拷gm锟斤拷锟斤拷list锟斤拷
return "success";
}
public String RfindByCondition() {
HttpServletRequest req=ServletActionContext.getRequest();
Map<String,String> condition = new HashMap<String,String>();
Enumeration<String> paramNames = req.getParameterNames();
while(paramNames.hasMoreElements()) {
String key = paramNames.nextElement();
String value = req.getParameter(key);
if(value!=null&&value.trim().length()!=0) {
condition.put(key, value);
}
}
List<ReaderModel> list=EBOFactory.getReaderEBO().findByCondition(condition);
this.pageHandler(list);
return "success";
}
private void pageHandler(List<ReaderModel> list){
if(list==null){
list=new ArrayList<ReaderModel>();
}
PageBean<ReaderModel> pb=new PageBean<ReaderModel>();
pb.setPageSize(5);
pb.setCurrPage(0);
pb.setTotalPage(list.size()/pb.getPageSize()+1);
if(pb.getPageSize()>=list.size()) {
pb.setPageList(list);//小于5不分页
}else {
pb.setPageList(list.subList(0, 1*pb.getPageSize()-1));//大于5,分页
}
ActionContext context=ActionContext.getContext();
context.getSession().put("pb", pb);
context.getSession().put("result", list);
}
}