簡體   English   中英

通過在下拉列表中選擇數據庫列,為自動建議搜索框調用jsp

[英]call jsp for autosuggestion search box by selecting column of database in dropdown list

我想要一個自動建議搜索框,它可以從數據庫中搜索內容。我具有一個功能,可以選擇用戶搜索哪一列來提供數據庫列的下拉列表。對於一個列,它的工作正常。但是當我選擇另一列時,它同時搜索了第一列第二個剛選擇的列。 我不想要。讓我不明白這是代碼。它具有mvc設計模式。
的index.html

  <script type="text/javascript">
    $(function(){
    $("#country").autocomplete("find.me", {
          extraParams: {
            choice: function() { 
              return $("#searchby").val();
            }
          }
        });
});
    </script>
       <div>


 Search By:
  <select name="searchby" id="searchby" >
  <option disabled selected value> -- select an option -- </option>
  <option value="name">Name</option>
  <option value="roll_no">Roll No</option>
  <option value="city">City</option>
      <option value="pin_code">Pin Code</option>
      <option value="state">State</option>
      <option value="country">Country</option>
      </select>
     </div>
        <span class="input input--nariko">

          <input id="country" class="input__field input__field--nariko" type="text" id="input-20" name="country" />
          <label class="input__label input__label--nariko" for="input-20">
            <span class="input__label-content input__label-content--nariko">Type Something</span>
          </label>
        </span>


Servlet控制器

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    PrintWriter out=response.getWriter();
    String searchBy=request.getParameter("choice");

    String[] arr=new AutoCompleteDao().autoComplete(searchBy);

 request.setAttribute("arr", arr);
    RequestDispatcher requestDispatcher=request.getRequestDispatcher("list.jsp");
    requestDispatcher.forward(request, response);
}


道類AutocompleteDao.java
公共類AutoCompleteDao {私有靜態最終字符串DRIVER_NAME =“ com.mysql.jdbc.Driver”; 私有靜態最終字符串URL =“ jdbc:mysql:// localhost:3306 /”; 私有靜態最終字符串DB_NAME =“ autotest”;

private static final String USER_NAME="root";
private static final String PASSWORD="WELcome@123";
Connection connection;


public String[] autoComplete(String searchBy){
    PreparedStatement stmt=null;
    ResultSet resultSet=null;

    String query=null;
    try{
        //Register JDBC Driver
        Class.forName(DRIVER_NAME).newInstance();
        //open a connection
        connection=(Connection)DriverManager.getConnection(URL+DB_NAME,USER_NAME,PASSWORD);
          switch(searchBy){
           case "name":
              query= "SELECT name FROM test";
               break;
           case "country":
               query="SELECT country FROM test";
               break;
           }

        stmt=(PreparedStatement) connection.prepareStatement(query);

     resultSet= stmt.executeQuery();
       List li = new ArrayList();




       while(resultSet.next())
       {
           li.add(resultSet.getString(1));
       }


    }
    catch(SQLException e){
        e.printStackTrace();
    }
    catch(ClassNotFoundException e){
        e.printStackTrace();
    }
    catch(InstantiationException e){
        e.printStackTrace();
    }
    catch(IllegalAccessException e){
        e.printStackTrace();
    }
    finally {
        try{
            if(stmt!=null)
                stmt.close();
            if(connection!=null)
                connection.close();
        }
        catch(SQLException e){
            e.printStackTrace();
        }
    }

return li.toArray(new String[li.size()]);
}


在web.xml

  <servlet>
<servlet-name>AutoCompleteServlet</servlet-name>
  <servletclass>AutoCompleteServlet</servlet-class>
  </servlet>

<servlet-mapping>
  <servlet-name>AutoCompleteServlet</servlet-name>
  <url-pattern>/find.me</url-pattern>
  </servlet-mapping>


和list.jsp顯示結果
的List.jsp

   <%String[] str=null;
str=(String[])request.getAttribute("arr"); 
if(str!=null){
//jQuery related start
String query = (String)request.getParameter("q");

int cnt=1;
for(int j=0;j<str.length;j++)
{
    if(str[j].toUpperCase().startsWith(query.toUpperCase()))
    {%>

       <%=str[j] %>

<%    } 
}
str=null;
//jQuery related end
}
%>

在這里,當我從下拉列表中選擇名稱並鍵入自動提示時,如果找到匹配項,它將顯示數據庫中的名稱。但是當我選擇國家/地區時。 它顯示,即從數據庫中建議國家和名稱。 我真的不明白為什么?

該行僅在onload上運行一次:

$("#country").autocomplete("find.me",{extraParams: {choice: end}} );

至此,空字符串end了,它將一直處理到后端,並在AutocompleteDao.java中的autoComplete方法中按default大小寫,該方法按名稱自動完成。

您沒有說出正在使用哪個自動完成插件,但是您可以執行以下操作:

$("#country").autocomplete("find.me", {
  extraParams: {
    choice: function() { 
      return $("#searchby").val();
    }
  }
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM