【问题标题】:Pagination issue with JSPJSP的分页问题
【发布时间】:2019-08-11 17:08:03
【问题描述】:

当用户单击搜索按钮时,我能够显示表格。但是现在我想将表格分成 20 行的块,用户可以单击下一个或上一个来前进和后退浏览所有数据。我不允许在这项作业中使用 JavaScript。仅限 JSP、Java、HTML。

两个调试out.print() 调用没有出现。单击其中一个按钮后正在加载不同的页面,但两个调试 out.print 调用未显示任何 HTML。我已经查看了How to know which button is clicked on jsp 这个帖子,但没有运气。

    <form method="GET">
      <center>
        <input type="submit" name="previous_table" value="Previous" />
        <input type="submit" name="next_table" value="Next" />
      </center>
    </form>
    </br>

    <%
          String val1 = request.getParameter("previous_table");
          String val2 = request.getParameter("next_table");
          try {
            if ("Previous".equals(val1)) { // Get previous results
              out.println("<h1>HELLO 1</h1>");
              buildTable(rs, out, false);
            }
            else if ("Next".equals(val2)) { // Get next results
              out.println("<h1>HELLO 2</h1>");
              buildTable(rs, out, true);
            }
          } catch(Exception e) {
            out.print("<center><h1>"+e.toString()+"</h1></center>");
          }
    %>

我还有一个后续问题。如果用户单击下一个或上一个按钮,我在页面上的当前表格会被新表格覆盖吗?这是我的意图,但我不知道它是否会那样工作。

我可以通过这样做来修复它:

    <form method="POST">
      <center>
        <input type="submit" name="previous_table" value="Previous" />
        <input type="submit" name="next_table" value="Next" />
      </center>
    </form>
    </br>

    <%
          String val1 = request.getParameter("previous_table");
          String val2 = request.getParameter("next_table");

【问题讨论】:

    标签: java jsp tomcat


    【解决方案1】:

    你应该为按钮添加名称和值,然后你可以通过参数点击值获得。

    `<input type="hidden" name="myprevious" value="previous"/>
    <input type="hidden" name="mynext" value="next" />
    <%
       String val1 = request.getParameter("myprevious");
       String val2 = request.getParameter("mynext");
       try {
         if (val1 == "previous") { // Get previous results
           out.println("<h1>HELLO 1</h1>");
           buildTable(rs, out, false);
         }
         else if (val2 == "next") { // Go next results
           out.println("<h1>HELLO 2</h1>");
           buildTable(rs, out, true);
         }
       } catch(Exception e) {
         out.print("<center><h1>"+e.toString()+"</h1></center>");
       } 
    %>
    

    `

    希望对你有帮助。

    谢谢。

    【讨论】:

    • 我试过了,但不幸的是它不起作用。 val1 和 val2 仍然有 null 值。
    【解决方案2】:

    尝试使用List&lt;&gt;()subList() 方法。 正如here所解释的那样。

    如何实现它##

    您可以在表单中添加一个隐藏的输入,为您的列表提供最后一个索引,例如:

    <input type="hiden" value="${last_index_of_your_list + 1}" name="index">
    

    然后在您的 servlet 部分中您可以这样输入:

    int index = Interger.ParseInt(request.getParameter("index"));
    
    if(index <= 0){
       datalist = datalist(0, 19>datalist.size()? datalist.size() : 19);
    }else{
    
       if(clicked_on_next){
    
          datalist = datalist(index, index+19>datalist.size()? datalist.size() : index+19 );
    
       }else{
    
          datalist = datalist(index - 40, index-20>datalist.size()? datalist.size() : index-20 );
    
       }
    
    }
    

    【讨论】:

    • 我认为这不适用于我的上下文。当单击按钮时,我基本上只需要 "Previous".equals(val1)"Next".equals(val2) 这个条件为真。
    • 我可以通过上述方法修复它
    【解决方案3】:

    您正在使用隐藏字段,但您需要为下一个和上一个使用提交按钮。

    <input type="submit" name="myprevious" value="previous"/>
    <input type="submit" name="mynext" value="next" />
    

    确保两者都在表单中定义。当我们之后提交表单时,您将在参数中获得按钮值。与我之前的答案相同。因为没有提交表单我们无法获取参数值。

    谢谢。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多