【问题标题】:How to forward a request from a servlet to a specific tab of a JSP page?如何将来自 servlet 的请求转发到 JSP 页面的特定选项卡?
【发布时间】:2015-08-15 00:07:35
【问题描述】:

如果我在 getRequestDispatcher 方法中使用以下 url,我会从 Tomcat 收到以下错误

404 请求的资源不可用

RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/nodes/node_configuration.jsp#tabs-3");

如果直接在地址栏上点击此 url,通常会将我带到 jQuery 构建的选项卡结构的第三个选项卡(使用来自 https://jqueryui.com/tabs/ 的源代码)。如果我删除#tabs-3,它不会抛出错误,但它会始终将我带到第一个选项卡。

我尝试通过将选项卡作为 url 参数传递来修改 jsp 来解决此问题。所以,现在 url 将是 nodes/node_configuration.jsp?selectedTab=#tabs-3。这在地址栏中可以正常工作,但调度员会忽略它。

【问题讨论】:

    标签: java jquery jsp jquery-ui servlets


    【解决方案1】:

    因为我不能以简单的方式做到这一点,所以我以艰难的方式做到了。 在 servlet 中,我将选定的选项卡作为请求对象属性传递:

    request.setAttribute("selectedTab", "3");
    

    这是jsp中的脚本:

    <script>
        $(function() {
            var param = document.getElementById("selectedTabInput").value;
            if (param != 0) {
                $('#tabs').tabs({
                    active : param
                });
            } else {
                $('#tabs').tabs();
            }
        });
    </script>
    

    我正在从 jsp 主体内的隐藏输入值中获取选定的选项卡:

    <input type="hidden" id="selectedTabInput" value="${requestScope.selectedTab}">
    

    【讨论】:

      【解决方案2】:

      您必须意识到,选项卡是前端(浏览器端)的关注点。因此,您必须将选项卡名称(或 ID)从后端传递到前端,例如作为脚本变量,然后使用脚本切换到正确的选项卡(使用 jQueryUI 选项卡,例如使用 active 选项)。

      【讨论】:

        【解决方案3】:

        getRequestDispatcher() 需要一个 servlet 路径(即 URL 中的路径部分没有应用程序的上下文路径,并且没有以 ? 和 # 开头的所有内容)。 您不能将整个 URL 传递给它。

        您可以使用请求属性将哈希值传递给 JSP,即 request.setAttribute( "hashTarget", "tabs-3"); 然后您必须在 JSP 中阅读此内容并启动 JavaScript 对其进行操作。 (就像之前的答案中提出的那样。)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-09-30
          • 2012-05-14
          • 2014-02-25
          • 1970-01-01
          • 1970-01-01
          • 2013-01-28
          • 1970-01-01
          • 2012-02-03
          相关资源
          最近更新 更多