1. 程式人生 > >如何實現在當前jsp頁面中通過點選按鈕來跳轉到上一個次訪問的頁面

如何實現在當前jsp頁面中通過點選按鈕來跳轉到上一個次訪問的頁面

1.問題來源場景介紹:

列表頁展示:
列表頁

新增專案頁面展示:
新增專案頁面

專案列表展示頁面中,點選”新增“按鈕,可以跳轉到新建專案頁面.當新增頁面只能從指定某一個列表展示頁面中跳轉過來時,只需要在返回按鈕對應的超連結地址中寫明專案列表展示頁的訪問路徑既可實現跳轉到上一次訪問的頁面.如下:

<!-- 這裡的 list.ht 是使用的相對於當前頁面的相對路徑 -->
<a class="link back" href="list.ht">返回</a>

問題關鍵點:
當多個頁面中均有”新增“按鈕,即可以從多個頁面跳轉到新建專案頁面時,以上方法便不能奏效了.

2.問題分析:

(1)專案工程介紹

出現問題的專案採用的SSM框架進行的開發,並且jsp頁面都是放置在WEB-INF目錄下,如圖:
jsp頁面位置示意圖
所以,不可以直接訪問jsp頁面,都必須通過Controller實現跳轉,才可以進行訪問指定的jsp頁面.也正是因為這一種原因,不可以使用window.history.back().

(2)處理思路:

在訪問專案列表展示頁時,在對應的Controller方法中,獲取到對應專案列表展示頁的訪問路徑,並將該路徑帶回到專案列表展示頁中;
在專案列表展示頁中對應的新增按鈕上,將訪問路徑作為引數傳遞給訪問新建專案對應的Controller方法中;
在Controller方法中獲取到訪問路徑

,然後再將訪問路徑帶回到新建專案列表對應的jsp頁面中,在返回按鈕對應的href引數賦值時,取出訪問路徑的值.既可以實現跳轉到上一次訪問的頁面.

3.程式碼:

(1)訪問專案列表jsp頁面對應的Controller方法:

@RequestMapping("list2")
public ModelAndView list2(HttpServletRequest request,HttpServletResponse response) throws Exception
{   
    <!-- 獲取到相應的訪問路徑 -->
    String preUrl= request.getRequestURI();
    List<NewItem
>
list=newItemService.getAll(filter); <!-- 將訪問路徑放入mv中 --> ModelAndView mv=this.getAutoView().addObject("itemList",list).addObject("returnUrl", preUrl); return mv; }

(2)在專案展示列表對應的jsp頁面中,在新增按鈕對應的href屬性中取出訪問路徑:

<a class="link add" href="edit.ht?returnUrl=${returnUrl}">新增</a>

(3)訪問新增專案jsp頁面對應的Controller方法:

    @RequestMapping("edit")
    public ModelAndView edit(HttpServletRequest request) throws Exception
    {
        <!-- 獲取到相應的訪問路徑 -->
        String url=RequestUtil.getSecureString(request,"returnUrl");
        Long id=RequestUtil.getLong(request,"id");
        String returnUrl=RequestUtil.getPrePage(request);
        NewItem item =newItemService.getById(id);
        <!-- 將訪問路徑放入mv中 -->
        return getAutoView().addObject("item",item)
                            .addObject("returnUrl",returnUrl)
                            .addObject("url", url);
    }

(4)在新建專案對應的jsp頁面中,在返回按鈕對應的href屬性中取出訪問路徑:

<c:set var="ctx" value="${pageContext.request.contextPath}" />
<a class="link back" href="${ctx}${url}">返回</a>