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