2016-02-18 39 views
0

我有一個jsp頁面,頁面中間有一個下拉控件。當用戶更改下拉列表的選擇時,頁面將提交給一個servlet並轉發回同一頁面,並顯示有關要顯示的用戶選擇的詳細信息。我希望頁面能夠自動導航回下拉菜單,而不必讓用戶自己回滾。如何使用RequestDispatcher從servlet轉發到內部頁面鏈接

在檢索相應的數據代碼之後的servlet,我有:

String forwardTo = "/WEB-INF/jsp/task-create.jsp#taskTypeSelection" 
request.getRequestDispatcher(forwardTo).forward(request, response); 

在我想這個servlet去放置下拉控制上面,看起來像JSP中的鏈接:

<a name="taskTypeSelection" id="taskTypeSelection"></a> 
<select class="form-control" id="taskTypeID" name="taskTypeID"> 
    <option value="">Select a task type.</option> 
    <option... 

但是,這不起作用,並且當分派器嘗試轉發時出現404錯誤。有沒有辦法讓我的當前設置與RequestDispatcher一起工作?我認爲如果我使用HttpServletResponse.sendRedirect,這個問題會少一些,但我使用RequestDispatcher增加安全性,因爲我已將所有jsps放在WEB-INF文件夾中,因此無法訪問sendRedirect(至少那是我的理解,這對我來說很新鮮)。

謝謝!

+1

你爲什麼不使用滾動純JavaScript或JQuery的功能?我認爲它可以比上面提到的RequestDispatcher更簡單。 –

+0

因爲我需要從servlet觸發滾動/導航操作。有可能這樣做嗎?我不認爲這是。 – arcademonkey

+0

無論如何,我認爲你必須使用客戶端代碼來做到這一點。也許這個演示會幫助你:http://stackoverflow.com/questions/6677035/jquery-scroll-to-element –

回答

0

這是一個基於Quan Nguyen的幫助而不是對原始問題的答案的解決方法。

在servlet中,我只是設置一個請求變量「scrollTo」作爲名稱,如果我希望轉發的頁面轉到的鏈接ID。然後,我創建了一個JS腳本(基於jQuery scroll to element)查找觸發文檔ready()事件的「scrollTo」請求變量(使用JSTL el)。如果找到一個,那麼它會將頁面滾動到jsp中指定的鏈接。

的Servlet:

request.setAttribute("scrollTo", "taskSelection"); 

JS腳本:

$(document).ready(function(){ 
    var scrollTo = "${scrollTo}"; 

    if(scrollTo !== "" && scrollTo!== null && scrollTo !== undefined){ 
     $('html, body').animate({ 
      scrollTop: $("#" + scrollTo).offset().top 
     }, 0); 
    } 
}); 
相關問題