谁知道DWR如何在文本框输入的时候下拉模糊查询的框呢,好象用到AJAX了,请高手帮忙
解决方案 »
- 获取session的问题 听说标题要长才会有人来回答 所以呢。。。
- 如何将用户输入的字符串日期转成DateTime型
- while (rs.next())是什么意思??
- hibernate源码
- 对不起数据工厂构建失败.java.lang.NoSuchFieldError: INTEGER 错误
- 为什么,request.getProtocol() 得不到https,当url其实是https的?
- 新手求救:怎样写代码:JSP页面等待2秒跳转另一个页面?JSP页面怎么显示数字时钟?
- 过年好,超级紧急问题,如果动态控制iframe中包含的页面?高分求教
- 一个简单页面出错???晕
- java初学者的问题!
- 添加和删除的刷新问题(各位拿出自己的解决办法来分享啊!)
- 求一个二手车交易平台的源码?最好是jsp的其他可以参考
有点难度,查询数据时都没什么问题。关键是显示的时候,自己用js来实现就有点麻烦。不像.net那样,官方直接有这方面的控制,直接添加就OK了
function findName(name){
xxxService.getAllNameLike(
name,
function(datas){
for(var i=0;i<datas.length;i++){
//根据返回的查询数据添加下拉项
}
}
);
}
dwr的配置这里就不说了
http://directwebremoting.org/dwr/browser/lists
大致的原理,跟楼主要求的应该差不多,具体代码如下:// 这个是调用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>
例子http://download.csdn.net/source/818429
放在tomcat的工程下可以启动tomcat即可演示
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>差不多就这样了 页面下拉效果不是很好,可以改进下