【问题标题】:Calling jsp inside a servlet with another new parameter使用另一个新参数在 servlet 中调用 jsp
【发布时间】:2016-04-01 10:32:12
【问题描述】:

我有一个 jsp (items.jsp),它迭代产品列表并显示结果产品。在它的脚本中,我迭代产品列表如下:

<jsp:useBean id="items" scope="page" class="com.certus.controllers.ItemPage"/>

<%
  List<Product> products = null;

   //check if the parameter "sort" available or not
    if (request.getParameter("sort") != null) {
        System.out.print("Three parameter method");
        products = items.filterProducts(Integer.parseInt(request.getParameter("sub")),
                Integer.parseInt(request.getParameter("cat")),request.getParameter("sort"));
    } else {
        System.out.print("Two parameter method");
        products = items.filterProducts(Integer.parseInt(request.getParameter("sub")),
                Integer.parseInt(request.getParameter("cat")));
    }
    for (Product p : products) {
%>

  some html content here....

到目前为止,一切正常。在同一个 jsp 中,我有一个选择框,我已经介绍了它来根据客户的需要对产品进行排序。一旦我从选择框中选择了一个项目,它就会向 servlet 发送一个请求,并且该 ajax 请求也没有任何问题。 (使用 System.out.println() 进行测试,并从 glass-fish 服务器获得所需的结果。)

从那里开始,我遇到了一个问题。这是我的 servlet:

     String category = request.getParameter("category");
        String sub = request.getParameter("sub_category");
        String sort = request.getParameter("sort");

//Tried with both methods but no luck
   //     response.sendRedirect("items.jsp?cat=" + category + "&sub="+ 
  //sub + "&sort=" + sort);

RequestDispatcher RequetsDispatcherObj = request.getRequestDispatcher("items.jsp?cat=" + category + "&sub=" + sub + "&sort=" + sort);
RequetsDispatcherObj.forward(request, response);

如您所见,我正在尝试使用包含在 url(排序)中的另一个参数重定向到 items.jsp,以调用 items.jsp 中的三个参数化方法。

欢迎所有建议找出我犯了错误的地方。如果您需要我的 ajax 调用,它是:

<script type="text/javascript">
    $(document).on("change", "#sortCombo", function () {
        $.ajax({
            url: 'sortProducts',
            data: {category: $('#category').val(), sub_category: $('#sub_category').val(), sort: $('#sortCombo').val()},
            type: 'get',
            cache: false,
            success: function (data) {
               // alert(data);
                // $('#somediv').text(responseText);
            },
            error: function () {
                alert('error');
            }
        }
        );
    });
</script>

sortProducts 是 servlet 名称。还需要告诉您使用排序参数在 url 上写入并刷新页面工作正常,并给出所需的结果,显示按名称、价格等级等排序的产品。 谢谢。

更新

如果我可以通过写在 URL 上来调用方法(三参数一) 为什么 ajax 响应不对response.sendRedirect("items.jsp?cat=" + category + "&amp;sub=" + sub + "&amp;sort=" + sort); 做同样的事情???

【问题讨论】:

  • 只有重定向的响应是servlet响应,如果使用ajax则不需要重定向。

标签: java ajax jsp servlets xmlhttprequest


【解决方案1】:

在 Servlet 中设置请求属性

在您的 servlet 中,您可以使用ServletRequest.setAttribute(String, Object) 使它们请求属性;

String category = request.getParameter("category");
String sub = request.getParameter("sub_category");
String sort = request.getParameter("sort");
request.setAttribute("category", category);
request.setAttribute("sub_category", sub);
request.setAttribute("sort", sort);

在 JSP 中读取请求属性

然后你可以在你的 JSP 中使用Expression Language Value Statements 来访问它们

${requestScope.category}
${requestScope.sub_category}

${requestScope.sort}

【讨论】:

  • 所以我必须使用RequestDispatcher RequetsDispatcherObj = request.getRequestDispatcher("items.jsp"); RequetsDispatcherObj.forward(request, response); 而不是RequestDispatcher RequetsDispatcherObj = request.getRequestDispatcher("items.jsp?cat=" + category + "&amp;sub=" + sub + "&amp;sort=" + sort); RequetsDispatcherObj.forward(request, response); ??
  • @johndoe 是的。您可能也可以使用include(取决于您要达到的目标)。
  • 如您所见,我只需要在items.jsp 中调用三参数方法,这需要另一个参数来对产品列表进行排序..
  • 是的。我没有去 EL 。我使用request.getParameter("cat");... 等等。三天来,我正在处理这个问题。您的帮助将是非常可观的。
  • 在 JSP 中使用 request.getAttribute 在 Servlet 中使用 request.setAttribute 您不能在目标 JSP 中使用 request.getParameter
【解决方案2】:

最后,我想出了一个解决方案。可能不是最合适的。我将我的servlet 代码更改为:

        response.getWriter().write(category+"-"+sub+"-"+sort);
//        RequestDispatcher RequetsDispatcherObj = request.getRequestDispatcher("items.jsp");
//        RequetsDispatcherObj.forward(request, response);

还有我的ajax success

success: function (data) {
   var split = data.split("-");
   document.location.href = "http://localhost:8080/ECommerceApp/items.jsp?cat=" + split[0] + "&sub=" + split[1] + "&sort=" + split[2];
                },

感谢每一个帮助我的人,甚至是评论。他们对我来说意义重大。 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-13
    • 2011-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多