如何使用RequestDispatcher从servlet转发到内部页面链接

时间:2016-02-18 15:10:57

标签: javascript java jsp servlets java-ee

我有一个jsp页面,页面中间有一个下拉控件。当用户更改下拉列表的选择时,页面将提交给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...

但是,这不起作用,当Dispatcher尝试转发时,我收到404错误。在使用RequestDispatcher的当前设置时,有没有办法使这项工作?我认为如果我使用HttpServletResponse.sendRedirect,这将不是一个问题,但我使用RequestDispatcher增加安全性,因为我已将所有jsps放在WEB-INF文件夹中因此无法访问sendRedirect(至少这是我的理解。很多这对我来说都是新的)。

谢谢!

1 个答案:

答案 0 :(得分: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);
    } 
});