2016-03-27 12 views
2

Veritabanından arama yapan bir autosuggestion arama kutusu istiyorum.Bir sütun kullanıcı aramasının bu veritabanı sütunları açılır listesini sağladığını seçme özelliğim var. iyi çalışıyor.Ama başka bir sütun seçerken, hem ilk seçilen sütunu hem de ikinci seçilen sütunu arar. Ben istiyorum değil.Ondan beni çıkarın İşte bir kod burada.Mvc tasarım deseni vardır.
Index.html
autosuggestion için jsp arama kutusu açılır listeden veritabanının sütununu seçerek arama kutusu

<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 Kontrolörü

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); 
} 


Dao Sınıf AutocompleteDao.java
public class AutoCompleteDao { özel statik nihai Dize DRIVER_NAME =" com.mysql.jdbc.Driver" ; özel statik son Dize URL = "jdbc: mysql: // localhost: 3306 /"; özel statik son Dize DB_NAME = "autotest"; i adını seçtiğinizde bir sonuç
List.jsp İşte

<%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 
} 
%> 

görüntülüyor

private static final String USER_NAME="root"; 
private static final String PASSWORD="[email protected]"; 
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> 


Ve list.jsp dropdownlist ve autosuggesstion yazarak bir eşleşme bulunduğunda veritabanından adını gösterir. Ancak ülke seçtiğimde. Örneğin, hem ülke hem de veritabanından gelen adı önerir. Gerçekten neden anlayamıyorum? Bu noktada end anda

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

boş dize olduğunu ve arka sonuna kadar yolunda çalışacağız ve içinde default durumda isabet:

+0

yok onun not.When ben ülkeyi seçin. Her iki girdiyi gösterir @YuliiaChuhui – Arrow

cevap

0

Bu hat sadece Onload kez çalıştırılır AutocompleteDao.javaautoComplete yöntemi, adı otomatik olarak tamamlanır.

Sen böyle bir şey yapmak mümkün olabilir otomatik tamamlama kullandığınız eklentisi, ancak deme: Ben isim ilk kez seçtikten sonra

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

efendim ben ilk kez doğru ismini gösterir, yani autosuggestion kutusuna ismini göstereceğim.Ama şimdi açılan menüden ülke seçtiğimde, şimdi "find.me" yi iki kez çok hızlı çağırıyor – Arrow

+0

Ok you varsayılan adı arkadan adlandırarak arayacağını söyleyin.Ama açılan menüden sayfayı yenilemeden yalnızca bir sonraki sefere ülkeyi seçtiğimde, hem isim hem de ülke – Arrow

+0

Tersi doğrudur. Ülkeyi ilk seçtiğimde, yalnızca ülkeyi gösterir. Bundan sonra açılır listeden isim seçtiğimde, bu sefer de isim ve ülke bilgilerini gösterir – Arrow

İlgili konular