繁体   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