我目前正試圖將搜索條件屬性保存到兩頁之間的會話:搜索頁面和編輯頁面。目標是保存三個變量:sYear,提交,collectionPeriod。我在搜索屏控制器這裏下面添加這些到會話:從視圖返回時會話屬性返回空值
request.getSession().setAttribute("sYearSave", sYear); request.getSession().setAttribute("submissionSave", submission); request.getSession().setAttribute("collectionPeriodSave", collectionPeriod);
在編輯屏控制器,我設置一個布爾isFromEditScreen
到true.
這讓我知道,我是從未來編輯屏幕。我打印出變量,並在編輯控制器屏幕中正確地獲取這些值。
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);
}
任何幫助將不勝感激!
當您使用瀏覽器的後退按鈕時,它不會生成對服務器的請求。瀏覽器通常從緩存中加載頁面,你是否嘗試過使用LinkButton或類似的東西? – rusty
你確定你輸入會話的值不是'null'?因爲,如果返回到搜索屏幕並使用「空白」URL重新加載頁面(即沒有給出參數),則最終可能會覆蓋會話的值,具體取決於您對Search控件的實現情況。除此之外 - 您是否考慮過標籤式瀏覽?一個會話,兩個選項卡,很多問題... – skirsch
您應該避免從'session'傳遞搜索參數。您應該爲搜索參數使用[查詢字符串](http://stackoverflow.com/questions/4128436/query-string-manipulation-in-java)。 – Apurv