gpt4 book ai didi

java - 带有 servlet 的 jQuery 自动完成 UI 不返回任何数据

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:39:48 27 4
gpt4 key购买 nike

过去几个小时我一直在摆弄这段代码片段,但我无法理解 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>

HTML 格式:

 <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自动完成的形式。我选择了 Google GSON 将结果序列化为 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 autocomplete demo


我已将 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 的结果是合适的,它可以按原样用于响应。

相关:

关于java - 带有 servlet 的 jQuery 自动完成 UI 不返回任何数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18612524/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com