【问题标题】:How to forward to an internal page link from a servlet with RequestDispatcher如何使用 RequestDispatcher 从 servlet 转发到内部页面链接
【发布时间】:2016-05-30 20:08:22
【问题描述】:

我有一个 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 无法访问(至少那是我的理解。很多这对我来说是新的)。

谢谢!

【问题讨论】:

  • 为什么不用纯Javascript或者JQuery的滚动功能呢?我认为它可以比您上面提到的 RequestDispatcher 更容易应用。
  • 因为我需要从 servlet 触发滚动/导航操作。有可能这样做吗?我不认为是。
  • 无论如何,我认为你必须使用客户端代码来做到这一点。也许这个演示会对你有所帮助:stackoverflow.com/questions/6677035/jquery-scroll-to-element
  • 您只需要转发到想要的 jsp 页面,然后在页面加载事件处理程序中,添加代码以滚动到该元素。
  • 好的,谢谢,我能够使用这种方法让它工作!如果您想将其发布为答案,我很乐意接受。

标签: javascript java jsp servlets jakarta-ee


【解决方案1】:

这更多是基于 Quan Nguyen 的帮助的解决方法,而不是对原始问题的回答。

在 servlet 中,我只是将请求变量“scrollTo”设置为我希望转发页面转到的链接 id 的名称。然后,我创建了一个 JS 脚本(基于 jQuery scroll to element)来查找在文档的 ready() 事件上触发的“scrollTo”请求变量(使用 JSTL el)。如果找到,则将页面滚动到所指示的 jsp 中的链接。

小服务程序:

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);
    } 
});

【讨论】:

    猜你喜欢
    • 2014-08-01
    • 1970-01-01
    • 2016-03-08
    • 2014-10-09
    • 2019-12-28
    • 2020-09-09
    • 1970-01-01
    • 1970-01-01
    • 2020-01-07
    相关资源
    最近更新 更多