Java jQuery ui从文本源自动完成

Java jQuery ui从文本源自动完成,java,jquery,firebug,jquery-autocomplete,jquery-ui-autocomplete,Java,Jquery,Firebug,Jquery Autocomplete,Jquery Ui Autocomplete,我尝试使用自动完成jquery ui脚本,但从文档中可以看出,远程源必须返回json数据,而不是纯文本响应, 我在jsp/servlet中开发我的应用程序,我不知道如何创建json数据 因此,我发现了另一个jquery自动完成插件--> 本教程和脚本工作得很好,但脚本没有我需要的相同选项。 我尝试保持相同的getdata.jsp和servlet页面,以适应jquery ui自动完成,只需更改脚本的链接,firebug告诉我请求的正确响应,但这不会显示 JavaScript调用: <scr

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

因此,我发现了另一个jquery自动完成插件-->

本教程和脚本工作得很好,但脚本没有我需要的相同选项。 我尝试保持相同的getdata.jsp和servlet页面,以适应jquery ui自动完成,只需更改脚本的链接,firebug告诉我请求的正确响应,但这不会显示

JavaScript调用:

<script>
$(function() {

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

$(函数(){
$(“#负责”)。自动完成({
来源:“getdata.jsp”,
最小长度:2
});
});
以下是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;
}
}
包fr.myldap.model;
导入java.util.ArrayList;
导入java.util.List;
公营人员b{
私营土地开发公司;
私人LDAPExterneDao peDao;
公共人员数据库(){
ContextVar=new ContextVar();
piDao=var.getPiDao();
peDao=var.getPeDao();
}
公共列表getData(字符串查询){
列表匹配=新的ArrayList(piDao.findByName(查询));
matched.addAll(peDao.findByName(查询));
返回匹配;
}
}

我希望任何人都能帮助我学习如何创建JSON。它正在取代XML作为信息交换媒介


首先从以下位置下载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数据可以有key:value对,对象可以存储在
{}
中,数组可以存储在
[]
中,等等

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

import net.sf.json.JSONObject; 
(它可能会发生变化,具体取决于您正在下载的库,您可以浏览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
您可以从以下网站下载所有内容:

要将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;
您应该从开始并决定是否首先返回JSON数组或对象

是一个非常灵活的插件,我认为最简单的解决方案是从JSP返回JSON,以便使用该插件

我发现跑步很容易。您需要下载它和依赖项(,),并将它们添加到
WEB-INF\lib
目录中

然后,您可以使用以下简单的方法:

编辑:更新的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);
%>


ok,但我必须使用哪种语法和类型的JSON数据?(数组,对象,字符串)例如:JSON{personne1{attr1{}attr2{}…}personne2{attr1{}attr2{}}???我不知道如何将JSON对象返回到查询,这是一个过于宽泛的语句。XML肯定仍然占有一席之地,在很长一段时间内不会过时。然而,在这个例子中,我同意JSON是最轻量级的简单解决方案+1对于一个好的链接,也谢谢你,我有json库,我理解你的解释,但是我必须返回多个人来自动完成,我有一个我需要的人的数组列表,我想返回这个对象列表的json数据!同样,返回json对象并不是结束,您需要在客户端解析返回的json对象。。。因此,也要探索这一部分……javax.servlet.ServletException:java.lang.NoClassDefFoundError:无法在JSONArray.fromObject(列表)上初始化类net.sf.json.JsonConfig;确保类路径中有所有必需的jar文件。。。。请看我的更正答案…我的答案包括最新版本的库和一个工作示例!
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
<%@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);
%>