如何将请求从servlet转发到JSP页面的特定选项卡?

时间:2015-06-01 13:38:13

标签: java jquery jsp jquery-ui servlets

如果我在getRequestDispatcher方法中使用以下url,我从Tomcat获得以下错误

  

404请求的资源不可用

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

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

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

3 个答案:

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

您可以使用请求属性将散列内容传递给JSP,即 request.setAttribute( "hashTarget", "tabs-3"); 然后你必须在JSP中阅读它并启动一个JavaScript来对它进行操作。 (就像先前的回答中提出的那样。)