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

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

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


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

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

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


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

});

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


//这里面可以设置我们自动补全的设置
    $.fn.jSuggest.defaults = {
        //输入多少字符时会自动补全
        minchar: 1,
        //透明度
        opacity: 1.0,
        zindex: 20000,
        delay: 2500,
        //加载时的图片信息
        loadingImg: 'Images/ajax-loader.gif',
        //加载时的文本提示
        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


}


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


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

 String project_key = request.getParameter("project_key");

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

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


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

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

代码如下:


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

//String key = request.getParameter("name_key");
// System.out.println("品牌的名字是:"+key);
if(request.getParameter("project_key") != null)
{
      String project_key = request.getParameter("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
        {            
        jdbcTemplate.open();

       //加上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 < str.length;a++)
        {
            project_key = str[a];
             sql += " or product_project like '%"+project_key+"%'";
            
        }
        String sqls= null;
        sqls = sql +"group by product_project";
        list = jdbcTemplate.queryForList(sqls);          
          for(int a=0;a<list.size();a++)             //添加<ul><li>*****</li></ul>的输出格式
          {
              Map map = ( Map)list.get(a);
              sb.append("<li>"+map.get("product_project")+"</li>");
          }
          
        
          sb.append("</ul>");

          
        }
      catch (SQLException e) {
            jdbcTemplate.rollback();
            e.printStackTrace();
        } finally {
            jdbcTemplate.close();
            
        }
}
%>

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


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













评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值