问题描述
如图。问题很初级,希望各位高手别见笑。用的webwork+spring+hibernate,我把其中几个关键文件的代码贴出来吧用户列表的jsp文件:userlist.jsp:<%@pagecontentType="text/html;charset=gb2312"%><%@taglibprefix="ww"uri="/webwork"%><jsp:includeflush="true"page="/head.jsp"></jsp:include><divalign="center"><ww:setname="pg"value="#request.pager"/><tablewidth="200"border="1"cellspacing="0"bordercolor="#666666"><tr><tdwidth="100"><divalign="center">用户名</div></td><tdwidth="100"><divalign="center">删除</div></td></tr><ww:iteratorvalue="#request['users']"id="user"><tr><td><divalign="center"><ww:propertyvalue="#user.username"/></div></td><td><divalign="center"><formaction="deluser.action"method=post><inputtype="hidden"name="userid"value="<ww:propertyvalue="#user.userid"/>"><inputtype="submit"value="删除用户"></form></div></td></tr></ww:iterator></table></div>
xwork.xml配置文件:<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPExworkPUBLIC"-//OpenSymphonyGroup//XWork1.1.1//EN""http://www.opensymphony.com/xwork/xwork-1.1.1.dtd"><xwork><includefile="webwork-default.xml"></include><packagename="user"extends="webwork-default"namespace="/user"><actionname="userlist"class="userController"method="userList"><resultname="success">/jsp/userlist.jsp</result><resultname="input"type="redirect">/login.jsp</result></action><actionname="deluser"class="userController"method="delUser"><resultname="success">/jsp/deluser_success.jsp</result><resultname="error">/index.jsp</result></action></package></xwork>
action的java文件packagecn.gth.test.view;importjava.util.List;importjava.util.Map;importcn.gth.test.domain.User;importcn.gth.test.service.IUserService;importcom.opensymphony.xwork.ActionContext;importcom.opensymphony.xwork.ActionSupport;@SuppressWarnings("serial")publicclassUserControllerextendsActionSupport{privateUseruser;privateIUserServiceuserServiceImp;privatelonguserid;publicUsergetUser(){returnuser;}publicvoidsetUser(Useruser){this.user=user;}/*publicIUserServicegetUserServiceImp(){returnuserServiceImp;}*/publicvoidsetUserServiceImp(IUserServiceuserServiceImp){this.userServiceImp=userServiceImp;}/*publiclonggetUserid(){returnuserid;}*/publicvoidsetUserid(longuserid){this.userid=userid;}@SuppressWarnings("unchecked")publicStringuserList()throwsException{try{Listusers=userServiceImp.getAllUser();Maprequ=(Map)ActionContext.getContext().get("request");requ.put("users",users);returnSUCCESS;}catch(Exceptione){e.printStackTrace();returnERROR;}}@SuppressWarnings("unchecked")publicStringdelUser()throwsException{try{Maprequ=(Map)ActionContext.getContext().get("request");requ.put("username",userServiceImp.getUser(userid).getUsername());userServiceImp.deluser(userid);returnSUCCESS;}catch(Exceptione){e.printStackTrace();returnERROR;}}}
实现了IUserService接口的UserServiceImp文件:packagecn.gth.test.service.imp;importjava.util.List;importcn.gth.test.dao.IUserDao;importcn.gth.test.domain.User;importcn.gth.test.service.IUserService;publicclassUserServiceImpimplementsIUserService{privateIUserDaouserDaoImp;/*publicUserDaoImpgetUserDaoImp(){returnuserDaoImp;}*/publicvoidsetUserDaoImp(IUserDaouserDao){this.userDaoImp=userDao;}publicListgetAllUser(){returnuserDaoImp.getAllUser();}publicUsergetUser(longuserid){returnuserDaoImp.getUser(userid);}publicvoiddeluser(longuserid){userDaoImp.deluser(userid);}}
实现了IUserDao接口的UserDaoImp文件:packagecn.gth.test.dao.imp;importjava.util.List;importorg.hibernate.Query;importorg.hibernate.Session;importorg.hibernate.Transaction;importcn.gth.test.common.DaoSession;importcn.gth.test.dao.IUserDao;importcn.gth.test.domain.User;publicclassUserDaoImpextendsDaoSessionimplementsIUserDao{publicListgetAllUser(){Sessionsession=this.getSession();try{Stringhql="fromUserorderbyusername";Queryquery=session.createQuery(hql);Listusers=query.list();returnusers;}catch(Exceptione){e.printStackTrace();returnnull;}finally{session.close();}}publicUsergetUser(longuserid){Sessionsession=this.getSession();try{Useruser=(User)session.get(User.class,userid);returnuser;}catch(Exceptione){e.printStackTrace();returnnull;}finally{session.close();}}publicvoiddeluser(longuserid){Sessionsession=this.getSession();Transactiontx=null;try{tx=session.beginTransaction();session.delete(getUser(userid));tx.commit();}catch(Exceptione){if(tx!=null){tx.rollback();}e.printStackTrace();}finally{session.close();}}}
如果想导入全部代码,可以下载这个文件,,考虑到文件体积太大,去掉了三个框架的lib包。请各位高手帮帮忙,谢谢!
解决方案
解决方案二:
不让用户看到异常是我们开发人员应该做的你为什么要把异常显示在页面呢如果想让异常显示在页面的话你就用个变量把异常存起来返回到页面就得了或者再做个if判断如果存放异常的变量有值就只显示异常信息而不显示转发的页面信息
解决方案三:
你用trycatch将程序包起来,发生异常了,进入catch块,在里面把异常信息装入变量传到页面,在页面显示出来
解决方案四:
up
解决方案五:
最简单的办法,Dao层的异常throw给managermanager的异常throw给actionaction的异常也throw出来,我就不信页面上看不到哇哈哈
解决方案六:
就是把代码里的trycatch全部去掉,方法里都加上个throwsException就OK了
解决方案七:
引用5楼yejingtao703的回复:
就是把代码里的trycatch全部去掉,方法里都加上个throwsException就OK了
这样确实是把异常输出到页面了,不过有两个大问题:1、多次发生异常后,程序会停止响应,怀疑是因为操作数据库的session关闭语句不能被执行所致2、页面上显示的异常是没有经过处理的异常,我想要的是经过处理后的可控异常
解决方案八:
异常时我们开发人员看的,你该不会让用户去读一堆错误语句吧?在开发方面,我们要提高用户体验度的没有那个用户愿意去读一堆异常语句的