[英]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.