使用DWR实现自动补全

自动补全:是指用户在文本框中输入前几个字母或汉字的时候,自动在存放数据的文件或数据库中将所有以这些字母或汉字开头的数据提示给用户供用户选择

在日常上网过程中,我们经常使用搜索引擎,当我们输入想要检索的关键字时,搜索引擎会提示我们相关的关键字

训练要点:

掌握使用DWR框架开发Ajax程序

使用MyEclipse 10.0 + MySql5.0

新建数据库:可以手动随便新建一个测试用的

DROP TABLE IF EXISTS `books`;
CREATE TABLE `books` (
  `id` varchar(100) NOT NULL,
  `isbn` varchar(25) default NULL,
  `title` varchar(100) default NULL,
  `price` double default NULL,
  `pubdate` date default NULL,
  `intro` bigint(20) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

随便插入几条数据:

INSERT INTO `books` VALUES ('1', 'BH123', 'java编程思想昂', '55', '2014-06-10', '333');
INSERT INTO `books` VALUES ('2', 'BH23', 'JS实战经典', '22', '2014-06-10', '3');
INSERT INTO `books` VALUES ('3', '1231232', 'Java核心技术卷', '66', '2014-06-13', '3');
INSERT INTO `books` VALUES ('4', '2342', 'java开发实战经典', '33', '2014-06-13', '98');

使用myeclipse 切换到database视图,右击新建一个数据连接

新建web project 项目:BookShop,使用MyEclipse添加SSH支持;

先加Spring支持,选择前四个库AOP,Core,Persistence Core,JDBC 选择spring3.0;

添加dwr的jar包到lib下;

添加hibernate支持;

下一步,选择Spring configuration file

下一步,选择Existing Spring configuration file

下一步选择刚刚配置好的JDBC Driver:mysql;

下一步,不选择 创建SessionFactory;

添加Sturts2支持:

选择struts2.1,下一步记得选择Struts2 Spring包;

在web.xml配置spring 和dwr;

<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:applicationContext.xml</param-value>
	</context-param>
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>

<servlet>
		<servlet-name>dwr</servlet-name>
		<servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
		<init-param>
			<param-name>debug</param-name>
			<param-value>true</param-value>
		</init-param>
	</servlet>
	<servlet-mapping>
		<servlet-name>dwr</servlet-name>
		<url-pattern>/dwr/*</url-pattern>
	</servlet-mapping>

在WEB-INF新建dwr.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC
    "-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN"
    "http://getahead.org/dwr/dwr30.dtd">
<dwr>
	<allow>
		<create javascript="BooksBiz" creator="spring" scope="application">
			<param name="beanName" value="BooksBiz"></param>
			<include method="findTitle" />
		</create>
		<convert converter="bean" match="com.books.entity.Books" />
		<create creator="new" javascript="validator">
			<param name="class" value="org.apache.struts2.validators.DWRValidator"></param>
		</create>
		<convert converter="bean" match="com.opensymphony.xwork2.ValidationAwareSupport" />
	</allow>
</dwr>

将books反向工程: 切换到Database Explorer模式,选择mysql 的books表右击表选择Hibernate Reverse …

在Java package新建包com.books.eneity

说明上面三部:

创建一个hibernate实体配置文件books.hbm.xml

创建一个实体类Books

创建Spring Dao

下一步:

Id策略选择 assigned;

完成;



将类BooksDao移到com.books.dao;

新建接口BooksBiz在com.books.biz下,添加如下方法:

public List<Books> findTitle(String title);

新建实现类BooksBizImpl implements BooksBiz 在com.books.biz.impl下

	private BooksDAO booksDAO;

	public List<Books> findTitle(String title) {
		List<Books> list = booksDAO.findTitle(title);
		return list;
	}

	public void setBooksDAO(BooksDAO booksDAO) {
		this.booksDAO = booksDAO;
	}

在BooksDAO下新建 findTitle方法:

	public List<Books> findTitle(String title2) {
		Query query = this.getSession().createQuery("from Books b where b.title like :title order by b.pubdate desc");
		query.setParameter("title", title2 + "%");
		return query.list();
	}

配置 applicationContext:

头部添加tx和aop支持

	xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:p="http://www.springframework.org/schema/p"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xsi:schemaLocation="
	http://www.springframework.org/schema/beans
	http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
	http://www.springframework.org/schema/tx
	http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
	http://www.springframework.org/schema/aop
	http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
	">

在</beans>前添加:

<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory"></property>
	</bean>
	<tx:advice transaction-manager="transactionManager" id="txAdvice">
		<tx:attributes>
			<tx:method name="find*" propagation="SUPPORTS" read-only="true" />
			<tx:method name="get*" propagation="SUPPORTS" read-only="true" />
			<tx:method name="*" propagation="REQUIRED" read-only="false" />
		</tx:attributes>
	</tx:advice>

	<aop:config>
		<aop:pointcut expression="execution( * com.books.biz.*.*(..))" id="pointcut" />
		<aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut" />
	</aop:config>

	<bean id="BooksBiz" class="com.books.biz.impl.BooksBizImpl">
		<property name="booksDAO" ref="BooksDAO"></property>
	</bean>

Index.jsp页面

在head下面加:

	<script type='text/javascript' src='dwr/engine.js'></script>
  	<script type='text/javascript' src='dwr/interface/BooksBiz.js'></script>
  	<script type='text/javascript' src='dwr/util.js'></script>
  	<style type="text/css">
  		#sel{
  			position: absolute;
  			top: 34px;
  			left:90px;
  			visibility: hidden;

  		}
  	</style>
  	<script type="text/javascript">
  		function getTitle(){
  			var title=dwr.util.getValue('title');
  			if(title==''){
  				$('sel').style.visibility="hidden";
  				return ;
  			}
  			BooksBiz.findTitle(title,callback);
  		}
  		function callback(list){
  			if(list.length==0){
  				$('sel').style.visibility="hidden";
  				return ;
  			}else{
  				$('sel').style.visibility="visible";
  			}
  			$('sel').size=list.length;
  			dwr.util.removeAllOptions('sel');
  			dwr.util.addOptions('sel',list,"title","title");
  		}
  		function getValue(){
  			$('title').value=$('sel').options[$('sel').selectedIndex].innerHTML;
  			$('sel').style.visibility="hidden";
  		}
  	</script>

  <body>
    图书搜索:<input type="text" id="title"  onkeyup="getTitle()">
    <select id="sel" ondblclick="getValue()" multiple="multiple"></select>
    <input type="button" value="搜 索">
  </body>
</html>

部署运行的时候,会有包冲突,

打开部署的目录F:\Java\apache-tomcat-6.0.37\webapps\BookShop\WEB-INF\lib,将里面的jar包拷贝出来 重复的antlr删掉最低版本的,然后将项目停掉吧我们之前工具导入的jar库都remove,再将拷贝出来的jar们复制到lib下;



部署,访问主页,输入数据库数据 的首个字就有对应数据显示;

源码下载:

http://pan.baidu.com/s/1eQtJhiq

dwr jar下载:http://pan.baidu.com/s/1o61Auee

使用DWR实现自动补全 类似百度搜索框的自动显示效果的更多相关文章

  1. 使用DWR实现自己主动补全 相似百度搜索框的自己主动显示效果

    使用DWR实现自己主动补全 自己主动补全:是指用户在文本框中输入前几个字母或汉字的时候,自己主动在存放数据的文件或数据库中将全部以这些字母或汉字开头的数据提示给用户供用户选择 在日常上网过程中,我们常 ...

  2. JavaScript实现模糊推荐的input框(类似百度搜索框)

    如何用JS实现一个类似百度搜索框的输入框呢,再填充完失去焦点时,自动填充配置项,最终效果如下图: 实现很简单,但是易用性会上升一大截,需要用到的有jquery-ui的autocomplete,jque ...

  3. Ajax以及类似百度搜索框的demo

    public class Ajax01 extends HttpServlet{ @Override protected void service(HttpServletRequest request ...

  4. idea中scala语言自动补全变量的同时,也自动补全类型

    IDE是IDEA,scala中,在new一个对象时,通过快捷键ctrl + Alt + V自动补全变量,但是我还想自动补全变量的类型,就像图中所示,在Specify type前面自动帮你打勾. 可以按 ...

  5. 仿Google首页搜索自动补全

    仿Google自动补全,实现细节: 后台是简单的servlet(其实就是负责后台处理数据交互的,没必要非跌用个struts...什么的) 传输介质:xml 使用jQuery js框架 功能实现: 如果 ...

  6. IntelliJ IDEA中类似Eclipse自动补全变量名称和属性名称的快捷键

    IntelliJ IDEA 默认快捷键模式下 自动补全变量名称 : Ctrl + Alt + v 自动补全属性名称 : Ctrl + Alt + f

  7. jQuery AutoComplete 自动补全

    jQuery.AutoComplete是一个基于jQuery的自动补全插件.借助于jQuery优秀的跨浏览器特性,可以兼容Chrome/IE/Firefox/Opera/Safari等多种浏览器. 特 ...

  8. Python2.7.12开发环境构建(自动补全)

    一.安装readline-devel包 Python的编译安装依赖于这个包 yum -y install readline-devel 二.安装Python2.7.12 Python官方网站(到此处下 ...

  9. Python自动补全

    转自:http://blog.linuxeye.com/324.html Python自动补全有vim编辑下和python交互模式下,下面分别介绍如何在这2种情况下实现Tab键自动补全. 一.vim ...

随机推荐

  1. Maven 项目管理工具基础入门系列(二)

    一.前言 在 Maven 项目管理工具基础知识系列(一) 这篇文章中,我们已经初步了解了 Maven,也知道了使用 Maven 作为项目管理工具的好处,特别是已经知道如何快速通过 Maven 构建 W ...

  2. [HNOI 2012]集合选数

    Description 题库链接 对于任意一个正整数 \(n\) ,求出集合 \(\{1,2,\cdots,n\}\) 的满足约束条件"若 \(x\) 在该子集中,则 \(2x\) 和 \( ...

  3. 【BZOJ2733】【HNOI2012】永无乡

    原题传送门 题意:给你N个带权点,一开始相互独立(每个点视为单独一个集合),有2种操作:1)合并2个集合:2)查询包含某元素集合内的权值第k小点编号. 解题思路:显然合并就是并查集,而查询则是平衡树实 ...

  4. bzoj 1076: [SCOI2008]奖励关

    Description 你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关.在这个奖励关里,系统将依次随机抛出k次宝物,每次你都可以选择吃或者不吃(必须在抛出下一个宝物之前做出选择,且现在决定不吃的宝 ...

  5. 洛谷P2319 [HNOI2006]超级英雄

    一开始是用二分图匹配(网络流)+二分做的,后来发现直接用匈牙利更简单 #include<cstdio> #include<cstdlib> #include<algori ...

  6. Delphi 7连接MySql 5.5.15(转)

    网上有很多关于Delphi连接MySql数据库的文章,在这里,我只记录下自己测试过的方法,以备所需.系统环境:Windows XP SP3软件环境:Delphi 7 .mysql-installer- ...

  7. H3C S3100交换机配置VLAN和远程管理

    一.基本设置 1. console线连接成功 2. 进入系统模式 <H3C>system-view //提示符由<H3C> 变为 [H3C] 3. 更改设备名称 [H3C]sy ...

  8. npm ERR! Windows_NT 10.0.10586

    安装vue脚手架时候一直失败,如图: npm cache clean 管理员下安装: 快捷键 win +x , 按A进入:

  9. JavaScript数据结构和算法----栈

    前言 栈是一种遵循后进先出(LIFO)原则的有序集合,新添加的或待删除的元素都保存在栈的末尾,称作栈顶,另外一端就叫栈底.在栈里,新元素都靠近栈顶,旧元素都接近栈底.可以想象桌上的一叠书,或者厨房里的 ...

  10. Git 中 SSH key 生成步骤

    由于本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以必须要让github仓库认证你SSH key,在此之前,必须要生成SSH key. 第1步:创建SSH Key.在windows下 ...