2013-03-31 104 views
-1

我目前正試圖將搜索條件屬性保存到兩頁之間的會話:搜索頁面和編輯頁面。目標是保存三個變量:sYear,提交,collectionPeriod。我在搜索屏控制器這裏下面添加這些到會話:從視圖返回時會話屬性返回空值

request.getSession().setAttribute("sYearSave", sYear); request.getSession().setAttribute("submissionSave", submission); request.getSession().setAttribute("collectionPeriodSave", collectionPeriod);

在編輯屏控制器,我設置一個布爾isFromEditScreentrue.這讓我知道,我是從未來編輯屏幕。我打印出變量,並在編輯控制器屏幕中正確地獲取這些值。

request.getSession().setAttribute("isFromEditScreen", new Boolean(true)); 
    sYearSave = (String)request.getSession().getAttribute("sYearSave"); 
    collectionPeriodSave = (String)request.getSession().getAttribute("collectionPeriodSave"); 
    submissionSave = (String)request.getSession().getAttribute("submissionSave"); 

但問題是,當我使用後退按鈕返回到搜索屏幕,搜索條件sYearSave, collectionPeriodSave, and submissionSave值返回NULL.出於某種原因,isFromEditScreen布爾工作得很好,並返回true.它實際上進入的聲明但搜索條件返回null.搜索控制器代碼如下:

if (isFromEditScreen != null && isFromEditScreen == true) { 
     System.out.println("Inside isFromEditScreen ==== true"); 
     sYear = (String)request.getSession().getAttribute("sYearSave"); 
     collectionPeriod = (String)request.getSession().getAttribute("collectionPeriodSave"); 
     submission = (String)request.getSession().getAttribute("submissionSave"); 


     sYearSave = (String)request.getSession().getAttribute("sYearSave"); 
     collectionPeriodSave = (String)request.getSession().getAttribute("collectionPeriodSave"); 
     submissionSave = (String)request.getSession().getAttribute("submissionSave"); 

     System.out.println("sYearSave ==== " + sYearSave); 
     System.out.println("submissionSave ==== " + submissionSave); 
     System.out.println("collectionPeriodSave ==== " + collectionPeriodSave); 
     System.out.println("isFromEditScreen set in else ==== " + isFromEditScreen); 
     } 

任何幫助將不勝感激!

+0

當您使用瀏覽器的後退按鈕時,它不會生成對服務器的請求。瀏覽器通常從緩存中加載頁面,你是否嘗試過使用LinkBut​​ton或類似的東西? – rusty

+1

你確定你輸入會話的值不是'null'?因爲,如果返回到搜索屏幕並使用「空白」URL重新加載頁面(即沒有給出參數),則最終可能會覆蓋會話的值,具體取決於您對Search控件的實現情況。除此之外 - 您是否考慮過標籤式瀏覽?一個會話,兩個選項卡,很多問題... – skirsch

+0

您應該避免從'session'傳遞搜索參數。您應該爲搜索參數使用[查詢字符串](http://stackoverflow.com/questions/4128436/query-string-manipulation-in-java)。 – Apurv

回答

1

如果您使用Spring MVC(如問題標籤所示),爲什麼不嘗試使用SessionAttributes註釋並使用Spring的ModelAndView API?還要確保屬性名稱在整個應用程序中是唯一的。

@RequestMapping("view-name") 
@SessionAttributes({ "isFromEditScreen" }) 
public class YourController { 

... 

    @RequestMapping 
    public ModelAndView display() { 

     ModelAndView modelAndView = new ModelAndView("view-name"); 
     modelAndView.addObject("isFromEditScreen", new Boolean(true)); 
     return modelAndView; 
    } 

... 
} 
+0

我們沒有用這種方式構建控制器。我希望我們已經開始使用這種方法的項目,因爲它看起來更有組織性和多功能性。 – Richard

0

我的會話屬性被覆蓋。忽視了錯誤。