<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-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 閱讀(332) 評論(0)  編輯  收藏 所屬分類: Ajax

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


    網站導航:
     
    主站蜘蛛池模板: 免费一级特黄特色大片| 亚洲精品国产V片在线观看 | 成人无码区免费视频观看| a在线免费观看视频| 朝桐光亚洲专区在线中文字幕| 亚洲欧洲另类春色校园小说| 国产AV无码专区亚洲AVJULIA| 四虎永久免费地址在线观看| 久久受www免费人成_看片中文| 久久青草免费91线频观看站街| 成人无码视频97免费| 理论片在线观看免费| 国产AV无码专区亚洲AV蜜芽 | 高清国语自产拍免费视频国产| 3344永久在线观看视频免费首页| a级毛片黄免费a级毛片| 国产成人综合亚洲| 亚洲国产日韩a在线播放| 亚洲国产激情在线一区| 亚洲日本在线免费观看| 亚洲第一精品在线视频| 亚洲国产精品无码久久一区二区| 国产成人精品久久亚洲| 久久精品国产亚洲5555| 亚洲无码黄色网址| 日韩一卡2卡3卡4卡新区亚洲| 亚洲美女在线国产| 久久精品国产亚洲5555| 青青草原亚洲视频| 亚洲人成网亚洲欧洲无码久久| 在线亚洲精品福利网址导航| 国产亚洲情侣一区二区无| 精品亚洲成α人无码成α在线观看| 免费国产真实迷j在线观看| 国产成人精品免费直播| 亚洲AV网站在线观看| 亚洲精品国产成人影院| 亚洲国产精品无码一线岛国| 亚洲第一福利视频| 中文字幕 亚洲 有码 在线| 亚洲性色精品一区二区在线|