问题:action里如何让它转向到成功或失败的页面,下面的action只有两个页面,"addFail"和"addSuccess"
AddUserDaoImpl还缺点什么吧?public class AddUserAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
AddUserForm addUserForm = (AddUserForm) form;
String username=addUserForm.getUsername();
String password=addUserForm.getPassword();
Usertable ut=new Usertable();
ut.setUsername(username);
ut.setPassword(password);
BeanFactory bf=new ClassPathXmlApplicationContext("applicationContext.xml");
AddUserService addUserService=(AddUserService)bf.getBean("addUserService");
addUserService.addUser(ut);
//如果在dao里出异常了,action里怎么让他就转到mapping.findForward("addFail")
return mapping.findForward("addSuccess");
}
//AddUserDaoImpl
public class AddUserDaoImpl extends HibernateDaoSupport implements AddUserDao { @Override
public void addUser(Usertable ut) {
try{
this.getHibernateTemplate().save(ut);
}catch (Exception e) {
e.printStackTrace();
}
}
}
//AddUserServiceImpl
public class AddUserServiceImpl implements AddUserService { private AddUserDao addUserDao;
public void setAddUserDao(AddUserDao addUserDao) {
this.addUserDao = addUserDao;
} @Override
public void addUser(Usertable ut) {
try{
addUserDao.addUser(ut);
}catch (Exception e) {
e.printStackTrace();
}
}
}
AddUserDaoImpl还缺点什么吧?public class AddUserAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
AddUserForm addUserForm = (AddUserForm) form;
String username=addUserForm.getUsername();
String password=addUserForm.getPassword();
Usertable ut=new Usertable();
ut.setUsername(username);
ut.setPassword(password);
BeanFactory bf=new ClassPathXmlApplicationContext("applicationContext.xml");
AddUserService addUserService=(AddUserService)bf.getBean("addUserService");
addUserService.addUser(ut);
//如果在dao里出异常了,action里怎么让他就转到mapping.findForward("addFail")
return mapping.findForward("addSuccess");
}
//AddUserDaoImpl
public class AddUserDaoImpl extends HibernateDaoSupport implements AddUserDao { @Override
public void addUser(Usertable ut) {
try{
this.getHibernateTemplate().save(ut);
}catch (Exception e) {
e.printStackTrace();
}
}
}
//AddUserServiceImpl
public class AddUserServiceImpl implements AddUserService { private AddUserDao addUserDao;
public void setAddUserDao(AddUserDao addUserDao) {
this.addUserDao = addUserDao;
} @Override
public void addUser(Usertable ut) {
try{
addUserDao.addUser(ut);
}catch (Exception e) {
e.printStackTrace();
}
}
}
哪位大侠能写下代码?
addUserService.addUser(ut);
} catch(Exception ex) {
forward....
}
不就可以了啊
addUserService.addUser(ut);
} catch( Exception e) {
mapping.findForward("addFail") ;
}
addUserDao.addUser(ut);
}catch (Exception e) {
e.printStackTrace();
throw e;
}
修改接口中的addUser()方法为addUser()throws Exception
所有底层的异常都上抛,然后交给最后的调用者Action一起捕获处理
发生异常的时候不能只打印异常信息,
需要用throw e;把异常抛给调用dao层方法的方法,
一层层抛到action类,
往上层方法抛了异常,
action才能把异常捕获,然后再根据是否捕获异常判断调向哪个页面。
比如addUserDao方法:
public void addUser(Usertable ut) {
try{
。
}catch (Exception e) {
e.printStackTrace();
}
}
}
你要写成:
public void addUser(Usertable ut) throws Exception{
try{
;
}catch (Exception e) {
throw e;
e.printStackTrace();
}
}
action方法
public ActionForward execute(ActionMapping mapping, ActionForm form,
try{
..............
}catch(Exception e){
mapping.findForward("addFail") ; }
mapping.findForward("addSuccess") ;
}
还有,你的一些方法是实现的接口里的抽象方法,
如果要抛出异常,接口抽象方法也需要加throws Excepiton,
比如public void addUser(Usertable ut) throws Exception;
不然会报错
public ActionForward execute(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) {
try{
addUserService.addUser(ut);
}catch(Exception e){
return mapping.findForward("addFail");
}
return mapping.findForward("addSuccess");
}
AddUserDaoImplpublic class AddUserDaoImpl extends HibernateDaoSupport implements AddUserDao{
public void addUser(Usertable ut) throws Exception{
this.getHibernateTemplate().save(ut);
}
}
AddUserServiceImplpublic class AddUserServiceImpl implements AddUserService {
private AddUserDao addUserDao;
public void setAddUserDao(AddUserDao addUserDao) {
this.addUserDao = addUserDao;
}
public void addUser(Usertable ut) throws Exception{
addUserDao.addUser(ut);
}
}
相应的接口中的方法都声明为不处理异常,全部上抛
try {
addUserService.addUser(ut);
} catch( Exception e) {
mapping.findForward("addFail") ;
}
方法2:一直向上抛,到action里处理。哪种方法比较好啊?????????