`
xiaoao808
  • 浏览: 43640 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用AjaxTags实现自动完成

阅读更多

     最近搞的一个通讯录想要加一个Ajax的自动完成功能,看起来功能虽小,可给用户的体验会改进不少。在一个介绍了几十种java的Ajax框架的网页里面,我找到了AjaxTags这个小东西,开始了我的第一次Ajax之旅。

     从AjaxTags的官方网站上面http://ajaxtags.sourceforge.net/可以下载到其最新的版本,目前是AjaxTags1.3顺便下载了一个官方的小例子看了看,确实很好阿,例子中使用Ajax完成了11种功能,然而我需要的是自动完成(autocomplete)部分的代码,所以重点研究这一部分

      jsp页面中,首先当然是要添加AjaxTags的标签支持,需要如下语句

Code


<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><%@ taglib uri="http://ajaxtags.org/tags/ajax" prefix="ajax"%>

     然后在页面中加入如下的标签

 

Code


<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><ajax:autocomplete
  source
="model"//从控件"model"中获得输入的字符
  target="make"//通过Ajax自动完成控件"make"的内容
  baseUrl="${contextPath}/autocomplete.view"//Ajax执行时调用的请求路径
  className="autocomplete"//css类名
  indicator="indicator"
  minimumCharacters
="1"//Ajax执行需要输入的最小字符数
   />

    在官方的例子中使用的是Servlet来完成Ajax,而对于使用struts就不适用了,后面说这个问题。

    在 autocomplete.view对应的Servlet类中需要建立xml来供页面调取,代码如下

Code
<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->public class AutocompleteServlet extends BaseAjaxServlet {
    
public String getXmlContent(HttpServletRequest request, HttpServletResponse response)
      
throws Exception {
    String model 
= request.getParameter("model");//从页面获取控件"model"的输入值
    CarService service = new CarService();
    List
<Car> list = service.getModelsByName(model);//调用CarService的方法获得汽车的List

    
// Create xml schema
    return new AjaxXmlBuilder().addItems(list, "model""make",true).toString();//生成xml
  }

}
    其实还是很简单的,接下来看CarService的代码吧,重点其实只有一段,然后在下面显示出自动提示,于是可以把刚才的那个ajax标签修改如下
Code
<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->public class CarService {
       
private static List<Car> cars = new ArrayList<Car>();
    
static {
        cars.add(
new Car("Ford""Escape"));
        cars.add(
new Car("Ford""Expedition"));
        cars.add(
new Car("Ford""Explorer"));
        cars.add(
new Car("Ford""Focus"));
        cars.add(
new Car("Ford""Mustang"));
        cars.add(
new Car("Ford""Thunderbird"));

        cars.add(
new Car("Honda""Accord"));
        cars.add(
new Car("Honda""Civic"));
        cars.add(
new Car("Honda""Element"));
        cars.add(
new Car("Honda""Ridgeline"));

        cars.add(
new Car("Mazda""Mazda 3"));
        cars.add(
new Car("Mazda""Mazda 6"));
        cars.add(
new Car("Mazda""RX-8"));
    }
//其实把上面这个地方改为数据库查询就可以从数据库中得到List来供页面显示
        
        
public CarService() {
        
super();
    }


        
public List<Car> getModelsByMake(String make) {
        .
    }


        
public List<Car> getModelsByName(String name) {
                ..
    }

        
public List<Car> getAllCars() {
        
return cars;
    }
}

例子看完了,开始实际操作吧,在我的页面中,需要通过一个名为"name"的文本框输入要查询的人的姓名

Code
<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><ajax:autocomplete
  source
="name"
  target
="name"
  baseUrl
="ajaxfinduser.do"
  className
="autocomplete"
  indicator
="indicator"
  minimumCharacters
="1"
   
/>

 接下来是我的Action,在写Action的时候,我以为只需要把原来Servlet继承的BaseAjaxServlet改为BaseAjaxAction就可以了,可后来才发现,jar包中根本就没有BaseAjaxAction这个类,无语,去官方网站上看了后才知道,在1.2更新到1.3的时候,把对Struts的支持去掉了,如果想支持Struts的话需要建立自己的BaseAjaxAction

(Struts removed, to use it create your own BaseAjaxAction.java and implement BaseAjaxXmlAction then just call xml = AjaxActionHelper.invoke(this, request, response);)

下载了一份AjaxTags的源码来看,原来AjaxActionHelper.invoke();这个方法需要调用Action中的getXmlContent方法来完成xml的写入,那就好说了,代码如下:

Code
<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->package com.txl.action;

import java.io.IOException;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.ajaxtags.servlets.BaseAjaxXmlAction;
import org.ajaxtags.xml.AjaxXmlBuilder;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.ajaxtags.servlets.AjaxActionHelper;
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

import com.txl.service.AjaxFindUserService;
import com.vo.User;

public class AjaxFindUserAction extends Action implements BaseAjaxXmlAction {

    
public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            
throws IOException, Exception {
        response.setCharacterEncoding(
"utf-8");
        response.getOutputStream().print(
new String(AjaxActionHelper.invoke(this, request, response).getBytes("UTF-8"),"ISO-8859-1"));//这里需要转换编码,不然无法支持中文查询
        response.getOutputStream().flush();
        
return null;
    }

    
public String getXmlContent(HttpServletRequest request,
            HttpServletResponse response) 
throws Exception {
        String realname 
= request.getParameter("name");

        ApplicationContext ctx 
= WebApplicationContextUtils
                .getRequiredWebApplicationContext(servlet.getServletContext());
//用ssh时需要在这里引入spring的配置文件,不然会在调用dao的时候报空指针异常

        AjaxFindUserService service 
= (AjaxFindUserService) ctx
                .getBean(
"AjaxFindUserService");
        List
<User> list = service.getUsersByRealname(realname);
        
return new AjaxXmlBuilder()
                .addItems(list, 
"realname""realname"true).toString();
    }

}
剩下工作就是在struts-config.xml中配置对应的action,在spring中配置对应的bean就ok拉

 

分享到:
评论

相关推荐

    Jsp AjaxTags组件的使用

    这是一个项目,import到MyEclipse就可以运行啊. 使用AjaxTags甚至不需要编写回调函数,不需要解析服务器响应,不需要程序员手动更新HTML页面显示,整个过程完全由AjaxTags完成,应用开发者只需要编写服务器响应...

    ajaxtags.jar.zip

    使用Maven或Gradle等构建工具可以帮助自动化这个过程,确保所有依赖项都被适当地管理和引用。 总的来说,Ajaxtags.jar是一个强大的工具,它通过提供预定义的JSP标签简化了Java Web应用中的Ajax开发。理解并熟练运用...

    ajaxtags1.5

    - **简单易用**:AjaxTags通过JSP标签的形式,使得Ajax功能的实现对开发者来说变得直观且易于理解。 - **可定制化**:每个Ajax标签都有丰富的属性,允许开发者根据需求进行配置,如设置请求类型、URL、更新的目标...

    java实现输入条件自动提示

    逻辑处理类可以使用Java语言编写,利用Java的String类和ArrayList类等实现自动提示的逻辑。 SERVLET类 SERVLET类是用于处理输入条件的类,负责将输入条件传递给逻辑处理类,并将自动提示的结果返回给前台页面。...

    ajaxtags-1.2-beta1-src.zip

    《AjaxTags 1.2 Beta1 源码解析:实现DisplayTag的无刷新功能》 AjaxTags 1.2 Beta1 是一个专门用于增强Java Web应用中DisplayTag功能的库,它使得开发者能够实现分页、查询和导出等功能的无刷新效果,极大地提升了...

    ajaxtags

    **Ajaxtags**是一个Java开发的项目,主要用于演示和实现AJAX(Asynchronous JavaScript and XML)技术。在Web应用中,AJAX允许页面部分更新,无需整个页面刷新,从而提供了更流畅、更快捷的用户体验。本项目是为...

    AjaxTags(ajax标签)

    AjaxTags项目是在现有的Struts ... AjaxTags改写了Struts标签类org.apache.struts.taglib.html.FormTag和org.apache.struts.taglib.html.BaseHandlerTag,并使用Struts的plugin技术,使得Struts提供了对AJAX的支持。

    ajaxtags入门教程

    ajaxtags框架是ajax框架之一,对一些常用的功能如自动完成等提供了非常便捷的操作。几乎不用写js代码。采用jsp标签格式。压缩包包含一个完整的web项目,拷贝在tomcat的webapps下即可运行。包含一个word文档和李刚...

    ajaxtags-1.1.5.jar

    ajaxtags-1.1.5.jar 版本比较古老,不过,用于学习练习还是不错的

    ajaxtags资料

    API文档通常会详细介绍各种函数、方法、类和对象,以及它们的参数、返回值和使用示例,帮助开发者更好地理解和使用Ajaxtags。 “最近版本”可能指的是Ajaxtags的最新更新或发行版,这通常包含了错误修复、性能提升...

    ajaxtags-1.5.1.jar.zip

    AjaxTags 1.5.1 是一个专门用于Web开发的Java库,它提供了一系列的JSP标签,能够帮助开发者轻松实现Ajax功能,无需深入理解底层JavaScript或XMLHttpRequest的工作原理。这个jar.zip包包含了核心的`ajaxtags-1.5.1....

    ajaxtags-1.2-beta3.jar.zip

    4. **使用标签**:在JSP页面中使用AjaxTags提供的标签,如`&lt;ajax:form&gt;`、`&lt;ajax:include&gt;`等,实现异步交互。 5. **处理后端逻辑**:在服务器端编写相应的Servlet或Controller来处理由AjaxTags发送的AJAX请求,并...

    ajaxtags完整实例

    1. 考虑兼容性:尽管AjaxTags使用了jQuery,但仍然需要确保目标浏览器支持JavaScript。 2. 错误处理:不要忘记处理Ajax请求可能抛出的错误,例如网络问题或服务器端异常。 3. 安全性:由于Ajax请求可以绕过页面重载...

    ajaxtags-1.3

    开发者无需深入JavaScript和XML的具体实现,只需要在JSP页面中像使用普通HTML标签一样使用AjaxTags,就能实现异步请求和动态内容更新。 以下是一些关键的AjaxTags知识点: 1. **AjaxFormTag**: 这个标签允许用户...

    ajaxtags-1.5.5-bin.zip

    例如,可以使用`&lt;%@ taglib prefix="ajax" uri="http://ajaxtags.sourceforge.net/ajaxtags" %&gt;`来导入AjaxTags的标签库,然后在表格中使用`&lt;ajax:displayTag&gt;`标签,通过配置`pageUrl`、`itemsPerPage`等属性来指定...

    ajaxtags-1.5.1-bin

    3. **事件处理**:AJAX Tags可以方便地绑定到不同的DOM事件上,如`onSuccess`、`onError`,这样可以在AJAX请求完成后执行相应的回调函数。 4. **简化编码**:通过封装复杂的JavaScript逻辑,AJAX Tags降低了开发...

    ajaxtags-1.5.5.jar.zip

    3. 下拉联动:在多级下拉菜单中,用户选择一项后,下级菜单会根据选择自动填充,实现数据的联动。 4. 数据检索:通过AJAX发送异步请求,后台处理后返回结果,更新前端展示,常见于搜索框的实时检索功能。 三、使用...

    喜欢用ajaxtags可以下载

    做软件开发的可以下在这个包,别忘记添加评论哦!

    ajaxtags-resources-1.5.5.jar.zip

    6. **依赖包**:使用AjaxTags Resources 1.5.5.jar时,可能需要其他的依赖库,如JSTL、Servlet API等。在部署项目时,确保这些依赖包已正确配置到Web应用的类路径中。 总的来说,AjaxTags Resources 1.5.5.jar.zip ...

Global site tag (gtag.js) - Google Analytics