我有一个jsp页面。如果用户输入某个文本,则发送ajax请求并检索List。现在,我想从List对象构建一个下拉列表,并将默认值设置为List Object的第一个元素。我怎么能这样做。
答案 0 :(得分:0)
您需要在Java端对列表进行编码(可能是JSON,或使用一些自定义分隔符),然后在onSuccess
回调中使用JavaScript将options
添加到您的选择框中编码值。
答案 1 :(得分:0)
我没有任何AJAX知识,因此我无法帮助实现这一目标。所以我解决这个问题的方法是在java / jsp中尽我所能,然后使用javascript / AJAX从辅助jsp中获取select,如下所示:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<select>
<c:set var="seenFirst" value="0" />
<c:forEach var="obj" items="${sessionScope.list}">
<c:choose>
<c:when test="${seenFirst == 0}">
<c:set var="seenFirst" value="1" />
<option value="${obj}" selected>${obj}</option>
</c:when>
<c:otherwise>
<option value="${obj}">${obj}</option>
</c:otherwise>
</c:choose>
</c:forEach>
</select>
修改强>
实际上,只需使用<c:forEach>
使用辅助var来计算选项(在id字段中),然后使用javacript将所选属性打开到第一个,就可以更清晰地构建菜单。像这样:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<select>
<c:set var="n" value="0" />
<c:forEach var="obj" items="${sessionScope.list}">
<option id="menu-${n}" value="${obj}">${obj}</option>
<c:set var="n" value="${n + 1}" />
</c:forEach>
</select>
你可以使用这样的东西来选择第一个元素:
var first = document.getElementById('menu-0');
first.selected = true;
答案 2 :(得分:0)
我建议使用servlet来处理ajax请求,使用JSON作为数据传输格式,并使用jQuery来执行真正的ajax请求以及遍历和操作HTML DOM树。您可以在How to use Servlets and Ajax?中找到很多示例。您的具体案例可以解决如下:
JSP:
<!DOCTYPE html>
<html lang="en">
<head>
<title>SO question 6250627</title>
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script>
$(document).ready(function() {
$('#search').keyup(function() {
$.get('search', $(this).serialize(), function(responseText) {
var $select = $('#results');
$select.find('option').remove();
$.each(responseJson, function(key, value) {
$('<option>').val(key).text(value).appendTo($select);
});
});
});
</script>
</head>
<body>
<form><input id="search" /></form>
<select id="results"></select>
</body>
</html>
Servlet(使用Google Gson将Java对象转换为JSON字符串):
@WebServlet(urlPatterns={"/search"})
public class SearchServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Map<String, String> results = someService.find(request.getParameter("search"));
String json = new Gson().toJson(results);
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
response.getWriter().write(json);
}
}