java完成输入框的自动完成功能

时间:2025-04-26 14:56:12

在这个例子中,我所使用的是jsuggest插件

前期准备工作:下载好jsuggest这个自动补全插件,然后将和文件、图片复制到相应的文件夹下,然后在相应的jsp页面导入这些文件


第一步:首先在jsp页面上,我们要将输入框通过jquery代码绑定到我们的自动补全插件上(即jsuggest插件上)

<!-- 导入自动补全插件的css、js文件,jquery文件,注意,jquery文件要现在文件前先导入 -->

<link rel="stylesheet" type="text/css" href="/lbsp/LW/css/">
<script type="text/javascript" src="../../js/jquery-1.7."></script>
<script type="text/javascript" src="/lbsp/LW/js/"></script>


<script type="text/javascript">
$(function(){
    $("#condition_value1").jSuggest({
           url: "",      //要发送到的处理页面
           type: "GET",
           data: "project_key" ,   //参数
           autoChange: true
         });

});

//这边我们也可以在文件下的$. 这个里面进行设置


//这里面可以设置我们自动补全的设置
    $. = {
        //输入多少字符时会自动补全
        minchar: 1,
        //透明度
        opacity: 1.0,
        zindex: 20000,
        delay: 2500,
        //加载时的图片信息
        loadingImg: 'Images/',
        //加载时的文本提示
        loadingText: 'Loading...',
        autoChange: false,
        url: "",
        type: "GET",
        data: ""
    };

到此,我们在jsp前端的部分就完成了


第二步:编写我们dao(数据库查询)类的编写

Public  ArrayList<String> queryByAutoFind(String key){

            //具体业务根据自己的需求写 

            //key为我们的绑定到插件data上时的project_key

           //sql语句可以写成

        key = “%” + key + “%”;

      ( Select  top 10 title from news where title like order by newsid desc , key

       或者下面这样写也可:Select  top 10 title from news where title like ‘%”+key+”%’ order by newsid desc


}


第三步:编写我们的处理页面页面,(注意:当然也可以是servlet页面)


首先我们要先判断是否在这个页面接收到传过来的data参数

 String project_key = ("project_key");

注意:如果这边我们没有写编码的过滤器的话,我们这边接收中文的时候可能会出现乱码:这时我们要这样处理:

String  key =new String( (“key”).getBytes(“8859_1”),”utf-8”);


查询出数据后,我们就要对这些集合进行遍历,按照页面的格式进行拼接输出到展示页面的格式

(注意:这边由于我已经封装好dao类,所以省去这一步,将第二、第三步直接写在这一个页面)

代码如下:


<%
List list = null;
String sql = null;
StringBuffer sb = new StringBuffer("<ul>");    //拼接ul输出到展示页面的格式
JdbcTemplate jdbcTemplate =new JdbcTemplate("proxool");

//String key = ("name_key");
// ("品牌的名字是:"+key);
if(("project_key") != null)
{
      String project_key = ("project_key");
       //处理输入框的首尾空格
      int i = project_key.length();// 字符串最后一个字符的位置  
      int j = 0;// 字符串第一个字符  
      int k = 0;// 中间变量  
      char[] arrayOfChar = project_key.toCharArray();// 将字符串转换成字符数组
      while ((j < i) && (arrayOfChar[(k + j)] <= ' '))   ++j;// 确定字符串前面的空格数
      while ((j < i) && (arrayOfChar[(k + i - 1)] <= ' '))   --i;// 确定字符串后面的空格数
      if ((j > 0) || (i < project_key.length())) {
          project_key=project_key.substring(j, i); // 返回去除空格后的字符串
          
    }       
      try
        {            
        ();

       //加上count(*),group by  product_project可以去除查询页面时相同的选项
        sql = "select product_project,count(*) as count from SQ_PRORES_PRODUCT t where product_project like '%"+project_key+"%'"; 
        String[] str = project_key.split(",|,|;|;|。|\\.| |  |   |\\@|\\$|\\*|\\¥|\\-|\\+|\\\\|<|>");
        for(int a =0 ;a < ;a++)
        {
            project_key = str[a];
             sql += " or product_project like '%"+project_key+"%'";
            
        }
        String sqls= null;
        sqls = sql +"group by product_project";
        list = (sqls);          
          for(int a=0;a<();a++)             //添加<ul><li>*****</li></ul>的输出格式
          {
              Map map = ( Map)(a);
              ("<li>"+("product_project")+"</li>");
          }
          
        
          ("</ul>");

          
        }
      catch (SQLException e) {
            ();
            ();
        } finally {
            ();
            
        }
}
%>

<%= ()%>    //注意:此句的作用就相当于我们在servlet中("***")这句的作用,就是将结果输出到jsp页面,不能漏掉


到此就可以实现自动补全功能!