隨筆-4  評論-0  文章-0  trackbacks-0

          Struts2的action的實現:

          package org.gordon;

          import java.io.IOException;
          import java.io.PrintWriter;
          import java.util.ArrayList;
          import java.util.HashSet;
          import java.util.Iterator;
          import java.util.List;
          import java.util.Map;
          import java.util.Set;

          import javax.servlet.http.HttpServletRequest;
          import javax.servlet.http.HttpServletResponse;

          import org.apache.struts2.interceptor.ApplicationAware;
          import org.apache.struts2.interceptor.ServletRequestAware;
          import org.apache.struts2.interceptor.ServletResponseAware;

          import com.opensymphony.xwork2.ActionSupport;

          public class AutoCompleteAction extends ActionSupport implements
            ServletRequestAware, ServletResponseAware, ApplicationAware 
          {

           
          private HttpServletRequest request;
           
           
          private HttpServletResponse response;
           
           
          private Map map ;
           
           
          private String key;
           
           
          public void setServletRequest(HttpServletRequest request) {
            
          this.request = request;
           }


           
          public void setServletResponse(HttpServletResponse response) {
            
          this.response = response;
           }


           
          public void setApplication(Map map) {
            
          this.map = map;
           }

           
           
          public void setKey(String key){
            
          this.key = key;
           }

           
          private String getAutoCompleteInformation(List list){
            StringBuffer sb 
          = new StringBuffer();
            sb.append(
          "<response>");
            
          for (Iterator it = list.iterator(); it.hasNext();) {
             String str 
          = (String) it.next();
             sb.append(createXMLView(str));
            }

            sb.append(
          "</response>");
            
          return sb.toString();
           }

           
          private List<String> createResults(){
            Set info 
          = (Set) map.get("autoComplete");
            List
          <String> list = null;
            
          if(info!=null){
             list 
          = new ArrayList<String>();
             
          for (Iterator it = info.iterator(); it.hasNext();) {
              String str 
          = (String) it.next();
              String getStr 
          = str.toUpperCase();
              String keyword 
          = key.toUpperCase();
              
          if(getStr.startsWith(keyword)){
               list.add(str);
              }

             }

            }

            
          return list;
           }

           
           
          private String createXMLView(String str){
            StringBuffer sb 
          = new StringBuffer();
            sb.append(
          "<value>");
            sb.append(str);
            sb.append(
          "</value>");
            
          return sb.toString();
           }

           
           
          public String addAutoComplete(){
            
          if(map.containsKey("autoComplete")){
             Set
          <String> set = null;
             set 
          = (Set) map.get("autoComplete");
             set.add(key);
            }
           else {
             Set
          <String> set = new HashSet<String>();
             set.add(key);
             map.put(
          "autoComplete", set);
            }

            
          return SUCCESS;
           }

           
           
          public void returnAutoComplete(){
            PrintWriter out 
          = null;
            
          try {
              out 
          = response.getWriter();
            }
           catch (IOException e) {
             e.printStackTrace();
            }

            List list 
          = createResults();
            
          if(list != null && list.size()>0){
             response.setContentType(
          "text/xml");
             response.setHeader(
          "Cache-Control""no-cache");
             out.println(getAutoCompleteInformation(list));
             out.close();
            }
           else {
             response.setStatus(
          204);
            }

           }

           
           
          public String execute(){
            addAutoComplete();
            
          return SUCCESS;
           }

          }



          html

           

            1<%@ page language="java" pageEncoding="utf-8"%>
            2<%@ taglib uri="/struts-tags" prefix="s"%>
            3<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
            4<html>
            5  <head>
            6    <title>Ajax Auto Complete</title>
            7    <style type="text/css">
            8
            9    .mouseOut {
           10    background: #708090;
           11    color: #FFFAFA;
           12    }

           13
           14    .mouseOver {
           15    background: #FFFAFA;
           16    color: #000000;
           17    }

           18    
          </style>
           19    <script type="text/javascript">        
           20        var xmlHttp;
           21        var completeDiv;
           22        var inputField;
           23        var nameTable;
           24        var nameTableBody;
           25
           26        function createXMLHttpRequest() {
           27            if (window.ActiveXObject) {
           28                xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
           29            }

           30            else if (window.XMLHttpRequest) {
           31                xmlHttp = new XMLHttpRequest();                
           32            }

           33        }

           34
           35        function initVars() {
           36            inputField = document.getElementById("names");            
           37            nameTable = document.getElementById("name_table");
           38            completeDiv = document.getElementById("popup");
           39            nameTableBody = document.getElementById("name_table_body");
           40        }

           41
           42        function findNames() {
           43            initVars();
           44            if (inputField.value.length > 0{
           45                createXMLHttpRequest();            
           46                var url = "getInfo.action?key=" + escape(inputField.value) +"&time=" + new Date().getTime();                        
           47                xmlHttp.open("GET", url, true);
           48                xmlHttp.onreadystatechange = callback;
           49                xmlHttp.send(null);
           50            }
           else {
           51                clearNames();
           52            }

           53        }

           54
           55        function callback() {
           56            if (xmlHttp.readyState == 4{
           57                if (xmlHttp.status == 200{
           58                    setNames(xmlHttp.responseXML.getElementsByTagName("value"));
           59                }
           else {
           60                    clearNames();
           61                }

           62            }

           63        }

           64        
           65        function setNames(the_names) {
           66            clearNames();
           67            var size = the_names.length;
           68            setOffsets();
           69            var row, cell, txtNode;
           70            for (var i = 0; i < size; i++{
           71                var nextNode = the_names[i].firstChild.data;
           72    row = document.createElement("tr");
           73                cell = document.createElement("td");
           74
           75                cell.onmouseout = function() {this.className='mouseOver';};
           76                cell.onmouseover = function() {this.className='mouseOut';};
           77                cell.setAttribute("bgcolor""#FFFAFA");
           78                cell.setAttribute("border""0");
           79                cell.onclick = function() { populateName(this); } ;                             
           80
           81                txtNode = document.createTextNode(nextNode);
           82                cell.appendChild(txtNode);
           83              row.appendChild(cell);
           84                nameTableBody.appendChild(row);
           85            }

           86            createClose();
           87        }

           88
           89  function createClose(){
           90   row = document.createElement("tr");
           91            cell = document.createElement("td");
           92            txtNode = document.createTextNode("close");
           93            cell.appendChild(txtNode);
           94            cell.setAtrribute();
           95            row.appendChild(cell);
           96            nameTableBody.appendChild(row);
           97  }

           98        function setOffsets() {
           99            var end = inputField.offsetWidth;
          100            var left = calculateOffsetLeft(inputField);
          101            var top = calculateOffsetTop(inputField) + inputField.offsetHeight;
          102
          103            completeDiv.style.border = "black 1px solid";
          104            completeDiv.style.left = left + "px";
          105            completeDiv.style.top = top + "px";
          106            nameTable.style.width = end + "px";
          107        }

          108        
          109        function calculateOffsetLeft(field) {
          110          return calculateOffset(field, "offsetLeft");
          111        }

          112
          113        function calculateOffsetTop(field) {
          114          return calculateOffset(field, "offsetTop");
          115        }

          116
          117        function calculateOffset(field, attr) {
          118          var offset = 0;
          119          while(field) {
          120            offset += field[attr]; 
          121            field = field.offsetParent;
          122          }

          123          return offset;
          124        }

          125
          126        function populateName(cell) {
          127            inputField.value = cell.firstChild.nodeValue;
          128            clearNames();
          129        }

          130
          131        function clearNames() {
          132            var ind = nameTableBody.childNodes.length;
          133            for (var i = ind - 1; i >= 0 ; i--{
          134                 nameTableBody.removeChild(nameTableBody.childNodes[i]);
          135            }

          136            completeDiv.style.border = "none";
          137        }

          138
          139    
          </script>
          140  </head>
          141  <body>
          142    <h1>Ajax Auto Complete Example</h1>
          143    <s:form action="search">
          144    <s:textfield label="Input the info which you want to search"
          145   name="key" id="names" cssStyle="height:20;" maxlength="20" onkeyup="findNames();"></s:textfield>
          146    <s:submit label="Search"></s:submit>
          147    </s:form>
          148    <div style="position:absolute;" id="popup">
          149        <table id="name_table" bgcolor="#FFFAFA" border="0" cellspacing="0" cellpadding="0"/>            
          150            <tbody id="name_table_body">
          151            </tbody>
          152        </table>
          153    </div>
          154  </body>
          155</html>
          156
          157


          注:引入struts2的用到的jar  struts.xml文件  修改web.xml文件。

          posted on 2008-08-30 18:53 Gordon 閱讀(336) 評論(0)  編輯  收藏 所屬分類: Ajax

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 扎兰屯市| 大同县| 富顺县| 五常市| 日土县| 葵青区| 论坛| 甘德县| 慈利县| 桓台县| 裕民县| 象州县| 木兰县| 鸡东县| 南木林县| 甘南县| 军事| 隆化县| 武城县| 白城市| 吴川市| 县级市| 钦州市| 福泉市| 陆川县| 龙江县| 尚义县| 新化县| 年辖:市辖区| 五指山市| 永川市| 武强县| 简阳市| 吉林市| 武定县| 滦南县| 塔河县| 华容县| 旬邑县| 西乡县| 基隆市|