谁知道DWR如何在文本框输入的时候下拉模糊查询的框呢,好象用到AJAX了,请高手帮忙

解决方案 »

  1.   

    沙发。
    有点难度,查询数据时都没什么问题。关键是显示的时候,自己用js来实现就有点麻烦。不像.net那样,官方直接有这方面的控制,直接添加就OK了
      

  2.   

    大体思路,在onKeyDown时触发javascript事件调用dwr里配置的方法返回查询数据,然后在回调方法里将返回的匹配数据显示出来
    function findName(name){
    xxxService.getAllNameLike(
    name,
    function(datas){
    for(var i=0;i<datas.length;i++){
    //根据返回的查询数据添加下拉项
    }
    }
    );
    }
    dwr的配置这里就不说了
      

  3.   

    去过dwr的网站吗,也许对你有帮助啊
    http://directwebremoting.org/dwr/browser/lists
      

  4.   

    好像在Ajax的书上有这个例子,你到网上搜一下就有了这个例子的代码
      

  5.   

    给一个小例子,在离开用户编号文本框时,在用户姓名文本框中显示姓名。
    大致的原理,跟楼主要求的应该差不多,具体代码如下:// 这个是调用JAVA类User,根据用户编号查询姓名
    // 其中chkUserId是js函数,用来判断userId是否合法
    function doQueryUserName()
    {
    var userId = DWRUtil.getValue('UserId'); if (chkUserId(userId)) {
    User.getName(userId, function(data) {
    DWRUtil.setValue('UserName', data);
    });
    }
    }<input type="text" name="UserId" size="15" maxlength="8" onChange="doQueryUserName()">
    <input type="text" name="UserName" size="15" disabled>
      

  6.   

    就是类似google搜索页面的自动弹出提示
    例子http://download.csdn.net/source/818429
    放在tomcat的工程下可以启动tomcat即可演示
      

  7.   

    汗,不好意思,当时我看到你的这个后,我自己去动手做了一下,后来忘记放到上面来了,希望对你有用
    index.jsp<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <title>My JSP 'index.jsp' starting page</title>
    <script type='text/javascript' src='/test/dwr/interface/Test.js'></script>
    <script type='text/javascript' src='/test/dwr/engine.js'></script>
    <script type='text/javascript' src='/test/dwr/util.js'></script>
    <script type='text/javascript' src='/test/dwr/interface/TestList.js'></script>
    <script type='text/javascript' src='/test/dwr/engine.js'></script>
    <script type='text/javascript' src='/test/dwr/util.js'></script>

    <style type="text/css">
    a:link { color: #00000; text-decoration: none} 
    a:visited { color: #000000; text-decoration: none} 
    a:hover { color: #000000; text-decoration: none} 
    a:active { color: #000000; text-decoration: none} 
    </style> <script type="text/javascript"> 
    function change(){ 
    Test.abc(document.all.reName.value,change1);
    TestList.getUserList(document.all.reName.value,change2);

    function change1(data){ 
    //document.all.id.focus();
    //alert(data); 

    function change2(datas){ 
    var flag=0;
    for(var data in datas){
    if(datas[data].fans_name==document.all.reName.value){
    document.all.id.value=datas[data].fans_id;
    document.all.name.value=datas[data].fans_name;
    document.all.password.value=datas[data].password;
    document.all.sex.value=datas[data].fans_sex;
    document.all.date.value=datas[data].fans_date;
    document.all.city.value=datas[data].fans_city;
    document.all.email.value=datas[data].fans_Email;
    flag=1;
    }
    }
    if(flag==0){
    document.all.id.value="";
    document.all.name.value="";
    document.all.password.value="";
    document.all.sex.value="";
    document.all.date.value="";
    document.all.city.value="";
    document.all.email.value="";
    //alert("未发现此人的数据");
    }
    }

    function out()

      menu.style.visibility="hidden"; 
    }

    function show(){
      menu.style.visibility="visible";
    }
    function txt(){
      TestList.getUserList(document.all.reName.value,change5);
    }

    function change5(datas){ 
    document.getElementById("menu").innerHTML="";
    for(var data in datas){
    if(document.all.reName.value!=null&&document.all.reName.value!=""){
    document.getElementById("menu").innerHTML+="<a href='#' onclick='display(\""+datas[data].fans_name+"\")'>"+datas[data].fans_name+"</a><br>";
    }
    }
    }
    function display(name){
    document.all.reName.value=name;
    document.all.reName.focus();
    out();
    }
    </script> </head> <body>
    <div align="center">
    <br>
    <div id="back"
    style="position: absolute; left: 500; z-index: 1; visibility: visible;">
    查找人的姓名:
    </div>
    <div id="txt"
    style="position: absolute; left: 610; z-index: 2; visibility: visible;">
    <input type=text name=reName onpropertychange="show();txt();"
    onBlur="change();"
    style="width: 100px; height: 21px; font-size: 10pt;">
    <div id="menu"
    style="background-color: #FFF; position: absolute; top: 22; left: 0; width: 100; height: 10; z-index: 2; visibility: hidden;">
    </div>
    </div> <br><br><br><br><br><br><br><br> 编号:<input type="text" name="id" onFocus="out();" > <br>
    姓名:<input type="text" name="name"> <br>
    密码:<input type="text" name="password"> <br>
    性别:<input type="text" name="sex"><br>
    出生日期:<input type="text" name="date"><br>
    城市:<input type="text" name="city"> <br>
    邮箱:<input type="text" name="email">
    </div>
    </body>
    </html>
    上面没什么注解的,就是onpropertychange是指当文本框改变时,调动后面的方法TestList类   Test类没有实际意义,是我当初学DWR时的一个例子,在这里就不添了package com.yourcompany.struts.proxy;import java.util.ArrayList;
    import java.util.List;import com.yourcompany.struts.TestDBO;
    import com.yourcompany.struts.bean.FansBean;public class TestList {

    public List getUserList(String userName){

    TestDBO dbo=new TestDBO();

    return dbo.getUserList(userName);
    }}
    TestDBO类  SqlDBO是我自己学的一个操作数据库的类,里面就是一些连接,增删改查,与关闭数据库的类package com.yourcompany.struts;import java.sql.ResultSet;
    import java.util.ArrayList;
    import java.util.List;import com.sql.SqlDBO;
    import com.yourcompany.struts.bean.FansBean;public class TestDBO extends SqlDBO{

    ResultSet rs=null;


    public List getUserList(String userName){

    List userList=new ArrayList();

    this.DBConnection();
    String sql="select * from users where userName like '%"+userName+"%'";
    System.out.println(sql);
    rs=this.Query(sql);
    try{
    while(rs.next()){
    FansBean fans=new FansBean();
    fans.setFans_id(rs.getString("userID").trim());
    fans.setFans_name(rs.getString("userName").trim());
    fans.setPassword(rs.getString("password").trim());
    fans.setFans_sex(rs.getString("sex").trim());
    fans.setFans_date(rs.getString("userDate").trim());
    fans.setFans_city(rs.getString("userCity").trim());
    fans.setFans_Email(rs.getString("userEmail").trim());

    userList.add(fans);
    }
    }catch(Exception e){
    System.out.println("读取数据出错:"+e);
    }
    this.close();
    return userList;
    }}
    FansBean类package com.yourcompany.struts.bean;public class FansBean {

    private String fans_id;//用户ID
    private String fans_name;//用户名
    private String password;//用户密码
    private String fans_sex;//用户性别
    private String fans_date;//用户生日
    private String fans_city;//用户所在城市
    private String fans_Email;//用户Email
    private String fans_zc_date;//用户注册时间

    public String getFans_name() {
    return fans_name;
    }
    public void setFans_name(String fans_name) {
    this.fans_name = fans_name;
    }
    public String getPassword() {
    return password;
    }
    public void setPassword(String password) {
    this.password = password;
    }
    public String getFans_sex() {
    return fans_sex;
    }
    public void setFans_sex(String fans_sex) {
    this.fans_sex = fans_sex;
    }
    public String getFans_date() {
    return fans_date;
    }
    public void setFans_date(String fans_date) {
    this.fans_date = fans_date;
    }
    public String getFans_city() {
    return fans_city;
    }
    public void setFans_city(String fans_city) {
    this.fans_city = fans_city;
    }
    public String getFans_Email() {
    return fans_Email;
    }
    public void setFans_Email(String fans_Email) {
    this.fans_Email = fans_Email;
    }
    public String getFans_zc_date() {
    return fans_zc_date;
    }
    public void setFans_zc_date(String fans_zc_date) {
    this.fans_zc_date = fans_zc_date;
    }
    public String getFans_id() {
    return fans_id;
    }
    public void setFans_id(String fans_id) {
    this.fans_id = fans_id;
    }}dwr.xml<?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN" "http://www.getahead.ltd.uk/dwr/dwr10.dtd">
    <dwr>
      <allow>
        <!-- address -->
        <create javascript="Test" creator="new">
        <param name="class" value = "com.yourcompany.struts.proxy.Test"></param>
       </create>
       
       <create javascript="TestList" creator="new">
        <param name="class" value = "com.yourcompany.struts.proxy.TestList"></param>
       </create>
     
        <!-- bean -->
           <convert converter="bean" match="com.yourcompany.struts.bean.FansBean" />
      </allow>
    </dwr>差不多就这样了  页面下拉效果不是很好,可以改进下