问题: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();
}
}
}

解决方案 »

  1.   

    在到里把异常抛到前面来捕捉,在catch里mapping.findForward("addFail") 
      

  2.   

    我就是不懂得AddUserDaoImpl里怎么抛,action里如何捕获判断??
    哪位大侠能写下代码?
      

  3.   

    try {
    addUserService.addUser(ut); 
    } catch(Exception ex) {
       forward....
    }
    不就可以了啊
      

  4.   

    try {
       addUserService.addUser(ut); 
    } catch( Exception e) {
       mapping.findForward("addFail") ;
    }
      

  5.   

    AddUserDaoImpltry{ 
    addUserDao.addUser(ut); 
    }catch (Exception e) { 
    e.printStackTrace(); 
    throw e;

     
      

  6.   

    我喜欢这样:
    修改接口中的addUser()方法为addUser()throws Exception
    所有底层的异常都上抛,然后交给最后的调用者Action一起捕获处理
      

  7.   

    你dao层方法写的有问题,
    发生异常的时候不能只打印异常信息,
    需要用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;
    不然会报错
      

  8.   

    Actionpublic class AddUserAction extends Action {
    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);
    }
    }
    相应的接口中的方法都声明为不处理异常,全部上抛
      

  9.   

    综合各位的意见得出两种方法:方法1:这样写的话不就要传mapping给dao层了
    try { 
      addUserService.addUser(ut); 
    } catch( Exception e) { 
      mapping.findForward("addFail") ; 
    }
    方法2:一直向上抛,到action里处理。哪种方法比较好啊?????????