2011-05-18 21 views
0

我有一個simpleformController需要處理請求get和post兩者。雖然獲取用戶需要被重定向到登錄屏幕,如果使用handlerequest但是onSubmit在發佈頁面時沒有被調用,那麼它工作正常?任何想法爲什麼?在SimpleformController上重定向

我曾試圖改變handlerequestprivate void方法displayForm並稱之爲從formBackingObject方法而獲得,並根據需要還正確調用onSubmit方法,工作正常。

但唯一的問題是在調用displayForm一個私人無效的方法,我無法重定向頁面登錄爲formBackingObject方法不具有效應初探對象,也沒有我可以從private方法displayFormformBackingObject回報Object使用return ModelView

@Override 
protected Object formBackingObject(HttpServletRequest request) throws Exception { 
    if (logger.isDebugEnabled()) { 
    logger.debug("In formBackingObject()... "); 
    } 
    Object obj = request.getSession().getAttribute(CURRENT_FORM); 
    if (obj != null) { 
    if (logger.isDebugEnabled()){ 
     logger.debug("update profile details form already exist, returning..."); 
    } 
    return obj; 
    } 

    MyForm Form = new MyForm(); 

    request.getSession().setAttribute(CURRENT_FORM, Form); 

    displayForm(request); 

    return Form; 
} 

原始的方法:不允許職位要由處理onSubmit

@Override 
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { 

    mv = new ModelAndView(new RedirectView(request.getContextPath() + "login.htm")); 

    RequestCache requestCache = new HttpSessionRequestCache(); 
    requestCache.saveRequest(request, response); 

    mv.addObject("c_name",getPManager().getCName()); 

    request.getSession().setAttribute("login_from_pac","yes"); 
    return mv; 
} 

的新方法:要加載的形式,但用戶應強制登錄(重定向到登錄如果登錄正確的用戶可以請參閱此表格)。從formBackingObject方法調用此方法來加載表單,但沒有響應對象重定向到登錄頁面。以下方法不起作用

private void displayForm(HttpServletRequest request) throws Exception { 

    HttpServletResponse response = null; --> 
    ModelAndView mav = null; 
    mav=new ModelAndView(new RedirectView(request.getContextPath() + "login.htm")); 

    RequestCache requestCache = new HttpSessionRequestCache(); 
    requestCache.saveRequest(request, response); 

    //mav.addObject("c_name",getPManager().getCName()); 

    request.getSession().setAttribute("c_name", getPManager().getCName()); 

    request.getSession().setAttribute("login_from_pac","yes"); 
    //return mav; 
} 

回答

0

您好我終於可以重定向到登錄頁面,然後再到達主頁面調用。我重寫isFormSubmission並使用showForm而不是handleRequest或從formBackingObject調用的任何私有方法。繼承人的代碼

@Override 
protected Object formBackingObject(HttpServletRequest request) throws Exception {   
    if (logger.isDebugEnabled()) { 
     logger.debug("In formBackingObject()... "); 
     } 
    Object obj = request.getSession().getAttribute(CURRENT_FORM); 
    if (obj != null) { 
        } 
     return obj; 
    } 

    MyForm Form = new MyForm(); 

    request.getSession().setAttribute(CURRENT_FORM, Form); 


    return Form; 
} 

/** 
* Submit form 
* @param HttpServletRequest 
* @param HttpServletResponse 
* @param Object 
* @param BindException 
* @throws Exception 
*/ 
@Override 
protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object command, BindException errors) throws Exception { 

    if (logger.isDebugEnabled()){ 
    logger.debug("onSubmit"); 
} 



     ModelAndView mav; 
     mav = new ModelAndView("formactivated"); 

     MyForm Form = (MyForm) command; 


     try{        
//do logic here 

                } 

@Override 
protected ModelAndView showForm(HttpServletRequest request, HttpServletResponse response, BindException errors)throws Exception { 
    if (logger.isDebugEnabled()) { 
     logger.debug("In showForm ... "); 
    } 

    if(errors.hasErrors()){ 
     if (logger.isDebugEnabled()) { 
      logger.debug("In showForm has errors... "); 
     } 
    ModelAndView mav; 
    mav = new ModelAndView("formactivated");  
    mav.addAllObjects(errors.getModel());   
    return mav; 
    } 


    other login here 

回報successview
}