来自文本源的jQuery-ui-autocomplete

时间:2011-04-27 07:54:40

标签: java jquery firebug jquery-autocomplete jquery-ui-autocomplete

我尝试使用 autocomplete jquery-ui 脚本,但是从文档中可以看出远程源必须返回 json数据,它不是在谈论纯文本响应, 我在 jsp / servlet 中开发我的应用程序,我不知道如何创建json数据。

所以我发现了另一个jquery自动完成插件 - > autocomplete feature with java

本教程和脚本运行良好,但脚本没有我需要的相同选项。 我尝试保持相同的getdata.jsp和servlet页面以适应jquery-ui-autocomplete,只需更改脚本的链接, firebug 告诉我正确的响应请求,但未显示

ScreenShot of firebug

JavaScript调用:

<script>
$(function() {

$( "#responsable" ).autocomplete({
    source: "getdata.jsp",
    minLength: 2
});
});
</script>

这是getdata.jsp文件:

<%@page import="java.util.Iterator"%>
<%@page import="java.util.List"%>
<%@page import="fr.myldap.model.*"%>
<%
PersonneDB db = new PersonneDB();
String query = request.getParameter("term");

List<Personne> personnes = db.getData(query);

Iterator<Personne> iterator = personnes.iterator();

while(iterator.hasNext()) {
    String personne = (String)iterator.next().getNomComplet();
    out.println(personne);
}

%>

这里是返回人员列表的PersonneDB类

package fr.myldap.model;
import java.util.ArrayList;
import java.util.List;

public class PersonneDB {
private LDAPInterneDao piDao;
private LDAPExterneDao peDao;

public PersonneDB() {
    ContextVar var= new ContextVar();
    piDao = var.getPiDao();
    peDao = var.getPeDao();
}

public List<Personne> getData(String query) {
    List<Personne> matched = new ArrayList<Personne>(piDao.findByName(query));
    matched.addAll(peDao.findByName(query));

    return matched;
}
}

我希望有人能帮助我

3 个答案:

答案 0 :(得分:5)

首先从this位置下载适用于java的json库。

现在要返回JSON数据,您需要遵循自己的格式,例如:

{
    "firstName": "John",
    "lastName": "Smith",
    "address": {
        "streetAddress": "21 2nd Street",
        "city": "New York",
        "state": "NY",
        "postalCode": 10021
    },
    "phoneNumbers": [
        "212 732-1234",
        "646 123-4567"
    ]
}

如上所示,json数据可以具有键:值对,对象可以存储在{ }内,数组可以存储在[ ]中,依此类推。

现在要将您的响应转换为JSON对象,您需要在jsp文件中导入以下语句:

import net.sf.json.JSONObject; 

(它可能会改变,取决于您正在下载的lib,您可以探索javadoc以获取更多详细信息)

现在看一下下面的代码,创建一个json对象并返回它:

    JSONObject object=new JSONObject();
    object.put("name","Amit Kumar");
    object.put("employeeList",employeeList);
....
....
    System.out.println("json object = "+object);
    return object;

它会自动将key:value对转换为正确的JSON对象...

更新:

必需的库:

commons-lang 2.3
commons-beanutils 1.7.0
commons-collections 3.2
commons-logging 1.1
ezmorph 1.0.4.jar
json-lib-2.2.2-jdk15.jar

您可以从here下载所有内容:

要将arraylist转换为json,请使用以下示例代码:

List mybeanList = new ArrayList();
mybeanList.add(myBean1);
mybeanList.add(myBean2);

JSONArray jsonArray = JSONArray.fromObject(mybeanList);
System.out.println("==== : "+jsonArray);

Map map = new HashMap();
map.put("beanlist", jsonArray);

JSONObject jsonObject = JSONObject.fromObject(map);
return jsonObject;

答案 1 :(得分:2)

了解如何创建JSON。它正在取代XML作为信息交换媒介。

http://www.roseindia.net/tutorials/json/json-jsp-example.shtml

答案 2 :(得分:2)

您应该从json.org开始,并决定是否要首先返回JSON数组或对象。

jQuery UI autocomplete是一个非常灵活的插件,我认为最简单的解决方案是从JSP返回JSON以利用插件。

我发现json-lib非常容易上手。您需要下载该依赖项(commons-collectionscommons-langcommons-loggingezmorphcommons-beantils)并将其添加到WEB-INF\lib 。目录

然后你可以使用像JSONArray这样简单的东西:

<%@page import="java.util.*, net.sf.json.*"%>
<%
    List<String> data = new ArrayList<String>();
    data.add("John");
    data.add("Paul");
    data.add("George");
    data.add("Ringo");
    JSONArray json = JSONArray.fromObject(data);
    out.println(json);
%>

返回["John","Paul","George","Ringo"]

如果您想要返回<key, value>对,jQuery UI自动填充功能也会使用JSONObject

为了完整性,我的WEB-INF\lib目录包含以下内容:

commons-beanutils-1.8.3.jar
commons-collections-3.2.1.jar
commons-lang-2.6.jar
commons-logging-1.1.1.jar
ezmorph-1.0.6.jar
json-lib-2.4-jdk15.jar

编辑:更新了示例JSP

<%@page import="java.util.*, net.sf.json.*"%>
<%!
public class Person {
    private String name;

    public Person(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}
%>
<%
    List<Person> data = new ArrayList<Person>();
    data.add(new Person("John"));
    data.add(new Person("Paul"));
    data.add(new Person("George"));
    data.add(new Person("Ringo"));

    JSONArray json = JSONArray.fromObject(data);
    out.println(json);
%>