Как фильтровать элементы таблицы на странице jsp на основе выбора пользователя

#jsp

#jsp

Вопрос:

страница index.jsp

 !DOCTYPE html>
<html>
<head>

</head>
<body>

<div align="center">

<form action ="demo.jsp" method="post">
    <table id="formTable">
        <tbody>
        
        <tr>
            <th> <label>START Date: </label> </th>
            <th> <input type = "date" name="Date1" id="date"></th>
         
        </tr>
        <tr>
            <th> <label>END Date: </label> </th>
            <th> <input type = "date" name="Date2" id="date"></th>
        </tr>
        
        <tr>
    
        <td> <label>Author </label> </td>
        <td> <input type ="text" name ="Author" id="author"> </td>
        </tr>
        <tr>
    
        <td> <label>Book Name </label> </td>
        <td> <input type ="text" name ="book_Name" id="bookName"> </td>
        </tr>
        <tr>

        <td> <label>Domain </label> </td>
        <td>  <select id="domain" name="Domain" id="domain">
                  <option value ="" selected Disabled>Select Domain</option>
                  <option>Biology</option>
                  <option>chemistry</option>
                  <option>maths</option>
                  
                  </select> </td>
                  </tr>
                  
        
        
        
        </tbody>
        </table>
        <br>
        <br>
        <input type = "submit"  value = "Submit" name = "submit"/>  
</form>
</div>
</body>
</html>
  

страница demo.jsp

  <!DOCTYPE html>
    <html>
    
    
    <body>
    
    
    <div align="center">
    <table id="customers" >
        <thead>
            <tr>
                <td> <label> Id </label> </td>
                <td> <label>book Name </label> </td>
                <td> <label>author </label> </td>
                <td> <label>domain</label></td>
                
                
            </tr>  
        
        
        
            <%
    
        
                      try{
                         
                          String query ="select * from book"
                          Connection conn = SqlConnection.getConnection();
                          Statement stmt = conn.createStatement();
                          ResultSet rs = stmt.executeQuery(query);
                          while(rs.next()){
                              %>
                              <tr>
                              <td><input type = text readonly value ="<%=rs.getString("Id")%>"> </td>
                              <td><input type = text readonly value ="<%=rs.getString("bookName")%>"> </td>
                              <td><input type = text readonly value ="<%=rs.getString("author")%>"></td>
                              <td><input class ="btn"type = text readonly value ="<%=rs.getString("domain")%>"title="<%=rs.getString("domain")%>"> </td>
                             
                              
                              </tr>
                              <%
                              }
                        }
                        catch(Exception ex){
                            System.out.println(ex);
                        }
               %>
        </thead>
    </table>
    
    
    
    </div>
    
    </body>
    </html>
  

Это мои страницы jsp — на индексной странице, если пользователь выбирает дату начала и дату окончания, должны быть выбраны только отчеты в пределах этого диапазона дат. Если пользователь заполняет любые другие текстовые поля вместе с этой начальной и конечной датой, он должен фильтровать результаты в соответствии с этим полем.
Например, если я выберу дату начала 01/01/2020 и дату окончания 28/02/2020, а также домен «биология», тогда должны отображаться отчеты с доменом «биология».

Заранее спасибо.

Обновленный demo.jsp

 <html>


<body>


<div align="center">
<table id="customers" >
    <thead>
        <tr>
            <td> <label> Id </label> </td>
            <td> <label>book Name </label> </td>
            <td> <label>author </label> </td>
            <td> <label>domain</label></td>
            
            
        </tr>  
    
    
    
        <%
                 string sdate =request.getParameter("date1");
                 string edate =request.getParameter("date2");
                 string author =request.getParameter("Author");
                 string book =request.getParameter("book_name");
                 string domain =request.getParameter("Domain");

    
                  try{
                     
                      String query ="select * from book where date 
                      between"' sdate'" and "' end '" or author = 
                      "' author '" or bookName = "' book_name '" or "' domain'"
                      Connection conn = SqlConnection.getConnection();
                      preparedStatement psmt = conn.createStatement();
                      psmt.setString(1,request.getParameter("date");
                      psmt.setString(2,request.getParameter("date");
                      psmt.setString(3,request.getParameter("author");
                     psmt.setString(4,request.getParameter("bookName");
                     psmt.setString(5,request.getParameter("domain");

                      ResultSet rs = stmt.executeQuery(query);
                      while(rs.next()){
                          %>
                          <tr>
                          <td><input type = text readonly value ="<%=rs.getString("Id")%>"> </td>
                          <td><input type = text readonly value ="<%=rs.getString("bookName")%>"> </td>
                          <td><input type = text readonly value ="<%=rs.getString("author")%>"></td>
                          <td><input class ="btn"type = text readonly value ="<%=rs.getString("domain")%>"title="<%=rs.getString("domain")%>"> </td>
                         
                          
                          </tr>
                          <%
                          }
                    }
                    catch(Exception ex){
                        System.out.println(ex);
                    }
           %>
    </thead>
</table>



</div>

</body>
</html>
  

Комментарии:

1. почему бы не использовать запрос like select * from book where startdate >= ? and enddate <= ? and domain=? , а затем передать значение для ? через preparestatement и выполнить запрос для получения результатов поиска.

2. спасибо за предложение, но пользователь может использовать любое одно поле вместе с датой начала и датой окончания или может использовать все поля с датой начала и датой окончания или не может использовать какие-либо поля, кроме полей даты в то время, я думаю, это не сработает

3. добавьте or условие вместо and и создайте свой запрос в соответствии с этим. т.е. Проверьте, не включают ли какие поля пустые в ваш запрос и т. Д.

4. Я думаю, используя оператор if и проверяя, достаточно ли даты after(date) или before(date) достаточно.

5. Спасибо за ваши ответы, я попробовал ваши идеи, я думаю, что мне чего-то не хватает, где вы можете, пожалуйста, дать мне демонстрационный код, чтобы мне было очень полезно решить.