Dwr 搜索条

首先dwr介绍回顾

步骤1.将dwr.jar包放在工程目录LIB下面

      2.在web.xml中加入dwr的<servlet>,如果整合了struts,则将dwr的配置文件放在struts配置文件下面 ,如下(红色为DWR配置文件)

    <servlet>
        <servlet-name>action</servlet-name>
        <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>

        <!-- Tiles configuration -->
        <init-param>
      <param-name>definitions-config</param-name>
      <param-value>/WEB-INF/tiles-defs.xml</param-value>
    </init-param>
  
  <!-- Struts configuration -->
    <init-param>
      <param-name>config</param-name>
      <param-value>/WEB-INF/struts-config.xml,/WEB-INF/struts-config2.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>

<servlet>
   <servlet-name>dwr-invoker</servlet-name>
   <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
   <init-param>
       <param-name>debug</param-name>
       <param-value>true</param-value>
   </init-param>
 </servlet>

 <servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>
 
   <servlet-mapping>
    <servlet-name>dwr-invoker</servlet-name>
    <url-pattern>/dwr/*</url-pattern>
 </servlet-mapping>

 

3.编写DAO类(操作类,相关的操作)

4.写dwr.xml文件,该文件必须放在跟WEB.xml同目录下面

5.写相关的JSp页面,在也面中必须引入如下几个JS文件

  <script type="text/javascript" src="dwr/util.js"></script>
  <script type="text/javascript" src="dwr/engine.js"></script>
  <script type="text/javascript" src="dwr/interface/*.js"></script>

  注意:*代表的是dwr.xml文件中的create标签中的属性javascript的值

6.在jsp页面中写上相关的js操作以及DIV

 

接下来就写一个模仿GOOGLE的搜索条,首先完成以上的1跟2两个步骤,不再说明

 

3.写相关的DAO层,跟service层,省去相关的代码

   

 

public List getxwdjlz(String xxhh) throws Exception {
  List list = new ArrayList();
  //list.add("33");
  //list.add("301");
  //list.add("304");

//如果结合spring一起写的,可以不用创建daos该对象,直接用SPRING容器自动创建,WEB启动的时候就已经创建好,直接用set方法调用就可以
  HyzkzmDAO daos=new Db2ServerHyzkzmDAO();    try{
   daos.getConncetion();
   list = daos.getxwdjlz(xxhh);
   System.out.println("列表 数值:"+list);
   daos.releaseConncetion();
  }
  catch(Exception ex){
   daos.releaseConncetion();
  }
        return list;
 }

4.dw.xml文件

  <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN" "http://getahead.org/dwr//dwr30.dtd">
<dwr>
  <allow>

   <!--这个create就是创建了刚才写的操作类对应的js-->
  <create javascript="hyzkDao" creator="new">
      <param name="class" value="service.impl.HyzkzmManagerImpl"></param>

     <!--可以操作该类中的getxwdjlz方法-->
    <include method="getxwdjlz"></include>
     </create>

   <!--一下可以参考,该例子用不到以下代码,省去-->
   <!--  <create javascript="userDao" creator="new">
      <param name="class" value="com.dwr.dao.UserDao"></param>
     </create>
     <convert converter="bean" match="com.dwr.model.User">
       <param name="include" value="username,age"></param>
     </convert> -->
 <!-- 返回list
     <convert converter="bean" match="org.coffee.oa.vo.Organise" />
  </allow> 

<!--如果返回的是一个list对象,其中list装载了其他对象,请参考如下-->
  <signatures>
    <![CDATA[
     import java.util.List; 
     import org.coffee.oa.biz.OrganiseBIZ;
     import org.coffee.oa.vo.Organise;
   ]]>
</signatures>
  -->
   </allow>
</dwr>

 

5.

<script type="text/javascript" src="dwr/util.js"></script>
  <script type="text/javascript" src="dwr/engine.js"></script>
  <script type="text/javascript" src="dwr/interface/hyzkDao.js"></script>

6.test.jsp代码如下

<!-- 模拟google搜索 -->
<script type="text/javascript">
  /**//********************************可配置选项********************************/
    // 被选中的相似关键字背景颜色
    var selectedBgColor = "#CCCCCC";
    // 未被选中的相似关键字背景颜色
    var unselectedBgColor = "#FFFFFF";
    // 相似关键字列表框的边框
    var listBorder = "1 solid #000000";
    /**//***************************************************************************/
 
    /**//********************************不可配置选项********************************/
   
    // 上一次输入的关键字(用来判断关键字是否有改变,没有则不再去服务端重新获取提示关键字)
    var oldKeyValue;
    // 鼠标相对于提示关键字列表框的位置(0:提示框外面,1:提示框里面)
    var mouseLocation = 0;
    // 当前选中的提示关键字索引(从0开始,等于-1表示没有被选中项)
    var selectedKeyIndex = -1;
    // 上一次选中的提示关键字索引(从0开始,等于-1表示没有上次被选中项)
    var oldSelectedKeyIndex = -1;
    // 提示关键字总数
    var tdCount = 0;
   
    /**//***************************************************************************/
   
      /**//*
        用途:给String对象添加去除左右空格方法
    */
    String.prototype.trim = function() {
      var m = this.match(/^/s*(/S+(/s+/S+)*)/s*$/);
      return (m == null) ? "" : m[1];
    }
   
    /**//*
        用途:初始化提示关键字列表框的状态
    */
    function initKeyListState(){
        selectedKeyIndex = -1;
        oldSelectedKeyIndex = -1;
        tdCount = 0;
    }
   
    /**//*
        用途:将上一次选中的关键字项变为未选中
    */
    function disSelectedOldKey(){
          //判断说明:oldSelectedKeyIndex!=selectedKeyIndex
          //        当只有一个相似关键字的时候,则不存在上一次选中和这次选中关键字,
          //        只要第一次选中后,按向上或向下箭头都是选中。
        if (oldSelectedKeyIndex!=-1&&oldSelectedKeyIndex!=selectedKeyIndex){
              $('keyId'+ oldSelectedKeyIndex).bgColor=unselectedBgColor;
          }   
          // 上一次选中项更新
          oldSelectedKeyIndex = selectedKeyIndex;
    }
   
    /**//*
        用途:当按上下箭头时选中新的提示关键字项,按回车时将选中的提示关键字输入到搜索框。
    */
    function setSelectedKey(){
        // $('keyId0')存在表示有相关提示关键字,不存在则不处理。
        if($('keyId0')){
          if (event.keyCode==38){
            //------处理向上事件------
              if (selectedKeyIndex==-1){
                  selectedKeyIndex = tdCount-1;
              }else{
                  selectedKeyIndex= (selectedKeyIndex+tdCount-1)%tdCount;
              }
              $('keyId'+ selectedKeyIndex).bgColor= selectedBgColor;   
              disSelectedOldKey();
          }else if (event.keyCode==40){
            //------处理向下事件------
              if (selectedKeyIndex==-1){
                  selectedKeyIndex = 0;
              }else{
                  selectedKeyIndex = (selectedKeyIndex+1)%tdCount;
              }
              $('keyId'+ selectedKeyIndex).bgColor= selectedBgColor;
              disSelectedOldKey();   
          }else if (event.keyCode==13){
            //------处理回车事件------
              $('cond').value=$('keyId'+ selectedKeyIndex).innerText;
              setCursorLast($('cond'));
              // 隐藏提示关键字列表框
              $('dropdownlistDiv').style.display='none';
          }
      }
    }
   
    /**//*
        用途:获取相似关键字
    */
    function getConformKey(){
 
      //得到输入的关键字
      var keyValue = $('cond').value.trim();
  // alert(keyValue);
  // alert("老的关键字"+oldKeyValue);
      // 如果这次的查询关键字和上次的一样,则不去服务器重新获取相似关键字列表。
      if (keyValue!=oldKeyValue){
          // 关键字为空则不去服务器获取相似关键字列表
          if (keyValue==''){
              dwr.util.removeAllRows('showKeyList');
              setDropListVisible(false);
              initKeyListState();
          }else{
              //采用ajax异步模式获取相似关键字(这里的useraction,改成自己的action)
     //alert("执行");
              hyzkDao.getxwdjlz(keyValue,conformKeyCallback);  //调用了类中的方法getxwdjlz,其中keyValue为传进去的一个参数,conformKeyCallback为回调方法,下面有对应的js方法
          }
      }
    }
   
    /**//*
        用途:获取关键字回调方法
    */
    function conformKeyCallback(keyList){
 
  // alert(keyList);
 
        dwr.util.removeAllRows('showKeyList');
        initKeyListState();
        if (keyList.length>0){
      // alert(keyList.length);
            // 生成相似关键字提示框
            dwr.util.addRows('showKeyList',keyList,cellFuncs, {
                cellCreator:function(options) {
                  var td = document.createElement("td");
                  td.id = 'keyId' + tdCount++;
                  td.onmouseover = function (){selectedKeyIndex=parseInt(this.id.substring(5,td.id.length));this.bgColor=selectedBgColor;disSelectedOldKey();};
                  td.οnclick= function (){
                      $('cond').value=this.innerText;
                      $('cond').focus();
                    setCursorLast($('cond'));
                    $('dropdownlistDiv').style.display='none';
                  };
                  return td;
                },escapeHtml:false});
            setDropListVisible(true);
        }else{
            setDropListVisible(false);
        }
    }
   
    /**//*
        用途:表格数据显示处理方法
    */
    var cellFuncs = [
      function(data) { return data; }
    ];
   
    /**//*
        用途:将输入框的光标移到最后
    */
    function setCursorLast(inputObj){
        var inputRange = inputObj.createTextRange(); 
        inputRange.collapse(true);
        inputRange.moveStart('character',inputObj.value.length);
        inputRange.select();
    }
           
    /**//*
        用途:创建相似关键字列表框
    */
    function createShowDiv(){
        var showDiv = document.createElement("div");
  //alert(showDiv);
  // var showDiv = document.createElement("div");
  // alert( dwr.util.getValue("cond"));
        showDiv.id = "dropdownlistDiv";  
  
        with(showDiv.style){
   
           position = "absolute";
           //层的绝对位置从这调整 
           left = parseInt($('cond').style.left.replace('px',''))+190;
           top = parseInt($('cond').style.top.replace('px',''))+parseInt($('cond').style.height.replace('px',''))+28;
           width = parseInt($('cond').style.width.replace('px','')); 
           border = listBorder; 
           zIndex = "1";  
           display='none';
           backgroundColor = unselectedBgColor;  
        }alert(showDiv);
        showDiv.οnmοuseοver=function (){mouseLocation=1;};
        showDiv.οnmοuseοut=function (){mouseLocation=0;};
        //overflow设置滚动条
        showDiv.innerHTML = "<div style='width:100%;height:150px;overflow:auto;'><table border='0' style='width: 100%;height:20%;font-size: 12;color:#33CC00;'><tbody id='showKeyList' style='margin-left: 0;margin-right: 0;margin-bottom: 0;margin-top: 0;'></tbody></table></div>";
        document.body.appendChild(showDiv);
        initKeyListState();
    } 
   
    /**//*
        用途:设置相似关键字列表框是否可见
        参数:isDisplay,true表示可见,false表示不可见
    */
    function setDropListVisible(isDisplay){
        if (mouseLocation == 1){
            return;
        }
        if (($('cond').value.trim()!='')&&(isDisplay==true)){
            $('dropdownlistDiv').style.display='';
        }
        else{
            $('dropdownlistDiv').style.display='none';
        }
    }
   
    // 将创建相似关键字列表框方法附加到onload事件中
    if (window.addEventListener){
       window.addEventListener('load', createShowDiv, false);
    }else if (window.attachEvent){
       window.attachEvent('onload', createShowDiv);
    }
    </script>
  </head>
 
  <body>

<div style="position:absolute;left:190px;top:25px;">
    <input AUTOCOMPLETE="off" οnkeydοwn="oldKeyValue=this.value.trim();setSelectedKey();"  οnkeyup="getConformKey();"  οnfοcus="if(this.value=='找人') this.value='';setDropListVisible(true);" οnblur="setDropListVisible(false);" style="width: 300; height: 23;z-index: 10;top:0;left:0;"  type="text" name="cond" value="找人" id="cond" />
    <input type="button" class="btn" value="搜一下"  οnclick="findBylike();" />
</div>
  </body>
</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值