小方的Java博客

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  27 随笔 :: 17 文章 :: 115 评论 :: 0 Trackbacks
GWT QQ 群号:28310588

功能:
1。当加载页面时把数据库的表读入matchArr
2。每次按键都是matchArr的查询,查询方法用正则表达式

抱歉,没什么注释,给大家添麻烦了
有任何疑问请联系我
qq:259102567 
MSN:jorwen_fang@hotmail.com

代码下载

我不久前写的关于gwt文章

另外在 《ajax in action》书中有提到更佳的算法,提高性能,以及打字过快的处理等功能。
本人这个程序对付300以下数据还是可以忍受等待时间的




代码:
1.InputHint.java
package mypack.client;

import java.util.ArrayList;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.*;

/**
 * Entry point classes define <code>onModuleLoad()</code>.
 
*/

public class InputHint implements EntryPoint {

    
private ArrayList matchArr;

    
private TextBox tb;
    
    
private Label label;

    
private ListBox list;

    
public void onModuleLoad() {
        label 
= new Label("输入:");
        tb 
= new TextBox();
        IH_Service.Util.getInstance().getResult(
            
new AsyncCallback() {
                
public void onSuccess(Object result) {
                    matchArr 
= (ArrayList) result;
                }


                
public void onFailure(Throwable caught) {
                    Window.alert(caught.toString());
                }

            }

        );
        tb.addKeyboardListener(
new KeyboardListener() {
            
public void onKeyDown(Widget sender, char keyCode, int modifiers) {
            }


            
public void onKeyPress(Widget sender, char keyCode, int modifiers) {
                
// TODO Auto-generated method stub

            }


            
public void onKeyUp(Widget sender, char keyCode, int modifiers) {
                fillList(tb.getText());
            }

        }
);
        tb.addFocusListener(
new FocusListener() {

            
public void onFocus(Widget sender) {
                list.clear();
                
if(tb.getText().equals("")){
                    
for (int i = 0; i < matchArr.size(); i++{
                        list.addItem((String) matchArr.get(i));
                        list.setVisible(
true);
                    }

                }
else{
                    fillList(tb.getText());
                    list.setVisible(
true);
                }

            }


            
public void onLostFocus(Widget sender) {
                list.setVisible(
false);

            }

        }
);
        list 
= new ListBox();
        list.addChangeListener(
new ChangeListener() {

            
public void onChange(Widget sender) {
                tb.setText(list.getItemText(list.getSelectedIndex()).trim());
            }

        }
);
        list.setVisible(
false);
        list.setVisibleItemCount(
10);
        RootPanel.get(
"label").add(label);
        RootPanel.get(
"tb").add(tb);
        RootPanel.get(
"list").add(list);
    }


    
private void fillList(String info) {
        IH_Service.Util.getInstance().fillList(info, matchArr,
                
new AsyncCallback() {
                    
public void onSuccess(Object result) {
                        ArrayList arr 
= (ArrayList) result;
                        list.clear();
                        
if(arr == null || arr.size() == 0){
                            list.addItem(
"��ƥ���无匹配字符�");
                            list.setVisible(
true);
                        }
else{
                            
for (int i = 0; i < arr.size(); i++{
                                list.addItem((String) arr.get(i));
                                list.setVisible(
true);
                            }

                        }

                    }


                    
public void onFailure(Throwable caught) {
                        Window.alert(caught.toString());
                    }

                }

        );
    }

}

2.IH_Service.java
package mypack.client;

import java.util.ArrayList;

import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.rpc.RemoteService;
import com.google.gwt.user.client.rpc.ServiceDefTarget;

public interface IH_Service extends RemoteService {

    
public static final String ENTRY_POINT="/IH_PRO/input_hint";

    
public static class Util{
    
      
public static IH_ServiceAsync getInstance(){

            IH_ServiceAsync instance 
= (IH_ServiceAsync)GWT.create(IH_Service.class);
            ServiceDefTarget target 
= (ServiceDefTarget)instance;
            target.setServiceEntryPoint(ENTRY_POINT);
            
return instance;
      }

    }

    
    
public ArrayList getResult();
    
public ArrayList fillList(String info, ArrayList matchArr);
}


3.IH_ServiceAsync.java
package mypack.client;

import java.util.ArrayList;

import com.google.gwt.user.client.rpc.AsyncCallback;

public interface IH_ServiceAsync {

      
public void getResult(AsyncCallback callback);
    
public void fillList(String info, ArrayList matchArr, AsyncCallback callback);
}


4.IH_ServiceImpl.java
package mypack.server;

import java.sql.*;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import mypack.client.IH_Service;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;

public class IH_ServiceImpl extends RemoteServiceServlet implements IH_Service {
    
private static final long serialVersionUID = 1L;
    Connection connection 
= null;
    PreparedStatement pstm 
= null;
    ResultSet rs 
= null;
    
public ArrayList getResult(){
        
try {
            Class.forName(
"com.microsoft.jdbc.sqlserver.SQLServerDriver");
            connection 
= DriverManager
                    .getConnection(
                            
"jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=ajax",
                            
"sa""sa");
            pstm 
= connection
                    .prepareStatement(
"select name from T_INPUT");
            rs 
= pstm.executeQuery();
            ArrayList arr 
= new ArrayList();
            
while(rs.next()){
                arr.add(rs.getString(
"name"));
            }

            
return arr;
        }
 catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
 catch (Exception e) {
            e.printStackTrace();
        }
finally{
            
try {
                
if(rs != null)
                    rs.close();
                
if(pstm != null)
                    pstm.close();
                
if(connection != null)
                    connection.close();
            }
 catch (SQLException e) {}
        }

        
return null;
    }

    
    
public ArrayList fillList(String info, ArrayList matchArr){
        Pattern p 
= Pattern.compile("^"+info+".");
        Matcher m
=null;
        ArrayList arr 
= new ArrayList();
        
for(int i = 0; i < matchArr.size(); i++){
            m 
= p.matcher((String)matchArr.get(i));
            
if(m.find()){
                arr.add((String)matchArr.get(i));
            }

        }

        
return arr;
    }

}


5.mycss.css
.sd{
width
:150px;
background-color
:cccccc;
border
:1px solid red;
padding-left
:2px;
overflow
:visible;
}

6.InputHint.html
<!--<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">-->

<html>
    
<head>
    
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    
        
<!--                                           -->
        
<!-- Any title is fine                         -->
        
<!--                                           -->
        
<title>Wrapper HTML for InputHint</title>

        
<!--                                           -->
        
<!-- Use normal html, such as style            -->
        
<!--                                           -->
        
<style>
            body,td,a,div,.p
{font-family:arial,sans-serif}
            div,td
{color:#000000}
            a:link,.w,.w a:link
{color:#0000cc}
            a:visited
{color:#551a8b}
            a:active
{color:#ff0000}
        
</style>

        
<!--                                           -->
        
<!-- The module reference below is the link    -->
        
<!-- between html and your Web Toolkit module  -->        
        
<!--                                           -->
        
<meta name='gwt:module' content='mypack.InputHint'>
        
<link rel='stylesheet' type='text/css' href='mycss.css'/>
        
    
</head>

    
<!--                                           -->
    
<!-- The body can have arbitrary html, or      -->
    
<!-- you can leave the body empty if you want  -->
    
<!-- to create a completely dynamic ui         -->
    
<!--                                           -->
    
<body>

        
<!--                                            -->
        
<!-- This script is required bootstrap stuff.   -->
        
<!-- You can put it in the HEAD, but startup    -->
        
<!-- is slightly faster if you include it here. -->
        
<!--                                            -->
        
<script language="javascript" src="gwt.js"></script>

        
<!-- OPTIONAL: include this if you want history support -->
        
<iframe id="__gwt_historyFrame" style="width:0;height:0;border:0"></iframe>

        
<h1>InputHint</h1>

        
<p>
            你好,输入前提示演示
        
</p>

        
<table align=center>
            
<tr>
                
<td id="label"></td><td id="tb"></td>
            
</tr>
            
<tr>
                
<td></td><td id="list" class="sd"></td>
            
</tr>
        
</table>
    
</body>
</html>

7.InputHint.gwt.xml
<module>

    
<!-- Inherit the core Web Toolkit stuff.                  -->
    
<inherits name='com.google.gwt.user.User'/>

    
<!-- Specify the app entry point class.                   -->
    
<entry-point class='mypack.client.InputHint'/>
    
    
<servlet path='/IH_PRO/input_hint' class='mypack.server.IH_ServiceImpl'/>
</module>





posted on 2006-07-14 13:51 方佳玮 阅读(3479) 评论(10)  编辑  收藏 所属分类: AJAX

评论

# re: [ajax] 用GWT做的输入前提示 2006-07-14 15:02 peace
“没什么注释,给大家添麻烦了”确实是这的  回复  更多评论
  

# re: [ajax] 用GWT做的输入前提示 2006-07-15 10:40 steeven
有了GWT, Google的产品就不稀奇了 :)  回复  更多评论
  

# re: [ajax] 用GWT做的输入前提示 2006-07-15 11:51 方佳玮
当然,我的程序与google的输入前提示无论算法和功能都无法比,只是模拟一下功能而已  回复  更多评论
  

# re: [ajax] 用GWT做的输入前提示 2006-07-15 18:43 CowNew开源团队
1、public ArrayList getResult();
没必要返回值为ArrayList 吧,List九足够了。
2、e.printStackTrace();
小心不知道怎么死的呀。  回复  更多评论
  

# re: [ajax] 用GWT做的输入前提示 2006-07-15 18:45 方佳玮
多谢指导,小弟受益了。  回复  更多评论
  

# re: [ajax] 用GWT做的输入前提示 2006-11-01 16:12 joeney
公布了群又不让加,LZ什么意思啊???  回复  更多评论
  

# re: [ajax] 用GWT做的输入前提示 2006-11-01 16:40 方佳玮
大哥,人满了  回复  更多评论
  

# re: [ajax] 用GWT做的输入前提示 2006-12-27 16:48 yanghuixia
谢谢  回复  更多评论
  

# re: [ajax] 用GWT做的输入前提示 2006-12-28 22:02 yanghuixia
数据库是怎么连起来的?  回复  更多评论
  

# re: [原创] 用GWT做的输入前提示 2007-04-27 18:23 张扬斌
不错 学习中   回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: