带有 servlet 的 jQuery autocomplete UI 不返回任何数据
jQuery autocomplete UI with servlet is not returning any data
在过去的几个小时里,我一直在摆弄这个代码片段,但我无法理解jQuery的自动完成UI是如何工作的。我遵循了本教程 http://viralpatel.net/blogs/tutorial-create-autocomplete-feature-with-java-jsp-jquery/我使用了相同的示例,但我没有向JSP发送请求,而是使用了servlet。请求到达servlet "Fetcher",它也执行,但没有任何东西返回给页面。这是代码。
public class Fetcher extends HttpServlet {
[...]
List<String> countryList = new ArrayList<String>();
String param = request.getParameter("term");
countryList.add("USA");
countryList.add("Pakistan");
countryList.add("Britain");
countryList.add("India");
countryList.add("Italy");
countryList.add("Ireland");
countryList.add("Bangladesh");
countryList.add("Brazil");
countryList.add("United Arab Emirates");
PrintWriter out = response.getWriter();
response.setContentType("text/plain");
response.setHeader("Cache-Control", "no-cache");
for(String country : countryList){
out.println(country);
}
[...]
}
HTML 中的 Javascript 片段:
<script>
$(function() {
$( "#tags" ).autocomplete({
source: "Fetcher"
});
});
</script>
网页表单:
<label for="tags">Tags: </label>
<input id="tags" />
页面上的示例似乎是为jquery中的专业人士编写的,http://jqueryui.com/autocomplete/#default。拜托,有人能告诉它到底是如何工作的,以便我可以在其他地方使用它。
servlet 应将自动完成数据作为 JSON 返回。有几个选项,我选择了一个数组,其中包含一个具有标签/值属性的对象:
@WebServlet("/autocomplete/*")
public class AutoCompleteServlet extends HttpServlet {
@Override
protected void doPost(final HttpServletRequest request,
final HttpServletResponse response) throws ServletException,
IOException {
final List<String> countryList = new ArrayList<String>();
countryList.add("USA");
countryList.add("Pakistan");
countryList.add("Britain");
countryList.add("India");
countryList.add("Italy");
countryList.add("Ireland");
countryList.add("Bangladesh");
countryList.add("Brazil");
countryList.add("United Arab Emirates");
Collections.sort(countryList);
// Map real data into JSON
response.setContentType("application/json");
final String param = request.getParameter("term");
final List<AutoCompleteData> result = new ArrayList<AutoCompleteData>();
for (final String country : countryList) {
if (country.toLowerCase().startsWith(param.toLowerCase())) {
result.add(new AutoCompleteData(country, country));
}
}
response.getWriter().write(new Gson().toJson(result));
}
}
若要返回自动完成数据,可以使用以下帮助程序类:
class AutoCompleteData {
private final String label;
private final String value;
public AutoCompleteData(String _label, String _value) {
super();
this.label = _label;
this.value = _value;
}
public final String getLabel() {
return this.label;
}
public final String getValue() {
return this.value;
}
}
因此,在 servlet 中,真实数据被映射到适合 jQuery 自动完成的形式。我选择了谷歌GSON将结果序列化为JSON。
相关:
- 了解和实现使用 AJAX 源代码和 appendTo 的 Jquery 自动完成
- 如何从 Java Servlet 返回 JSON 对象
至于HTML文档(在.jsp中实现),请选择正确的库,样式表和样式:
<html>
<head>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.10.2.js"> </script>
<script type="text/javascript" src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"> </script>
<link rel="stylesheet" href="http://code.jquery.com/ui/1.10.2/themes/smoothness/jquery-ui.css" />
<script type="text/javascript" src="autoComplete.js"> </script>
</head>
<body>
<form>
<div class="ui-widget">
<label for="country">Country: </label>
<input id="country" />
</div>
</form>
</body>
</html>
相关:jQuery 自动完成演示
我已经把Javascript函数放在一个单独的文件中autoComplete.js
:
$(document).ready(function() {
$(function() {
$("#country").autocomplete({
source: function(request, response) {
$.ajax({
url: "/your_webapp_context_here/autocomplete/",
type: "POST",
data: { term: request.term },
dataType: "json",
success: function(data) {
response(data);
}
});
}
});
});
});
自动完成函数使用 AJAX 请求来调用 servlet。由于 servlet 的结果是合适的,因此可以按原样用于响应。
相关:
- jQuery UI Autocomplete的"source"回调中的"响应"和"请求"参数是什么?
- jQuery 自动完成小部件
- jQuery ajax 函数
相关文章:
- AJAX:$_GET不返回任何值
- document.styleSheets不返回任何内容
- 在解析对象.save()中;没有返回任何原因
- PhantomJs在控制台中发出http请求时不会返回任何状态
- 为什么这个array.filter总是不返回任何内容
- IE8DOM转换XML,并且不从jQueryfind()或filter()返回任何内容
- 比较数组中的连续元素不会返回任何结果(javascript)
- WebKitBrowser.StringByEvaluatingJavaScriptFromString 不返回任何值
- Ajax 不返回任何结果
- 我的 API 调用没有返回任何内容
- Javascript函数img.onload不返回任何内容(真或假)
- 为什么我的 sinon 假服务器不返回任何内容
- beforeSave导致查询不返回任何内容
- Ajax对PHP页面的调用总是不返回任何内容,即使PHP页面有回声
- 控制器的Helper函数不返回任何内容
- 函数不返回任何内容
- Breeze.js getEntities不返回任何实体
- 自定义Angular.js过滤器在IE8中不返回任何内容,在Chrome/FF中运行良好
- Dexie.exists()方法不返回任何内容(Dexie.js&IndexedDB)
- getElementsByClassName未返回任何内容