【发布时间】:2020-06-16 21:03:48
【问题描述】:
我知道这是一个反复出现的问题,适用于所有 Web 编程语言。我花了五个小时尝试应用此处找到的解决方案但没有成功,这就是我写这个问题的原因。
我想要什么:
我有两个选择器,加载页面的时候都是直接从数据库中填充信息成功的。
如果我从第一个选择器 (selectSchraubfall) 中选择一个选项,我希望第二个选择器 (selectWorkplace) 更新,只显示第一个选择器的可能结果。
我做了什么:
- 在 jsp 中创建选择器,从执行 sql 查询的 servlet 获取信息✔。
- 为第一个选择器 ✔ 创建了 onChange 事件监听器。
- 使用 Ajax 调用创建了一个 js 函数,以从控制器进行新查询并为第二个选择 ✔ 获取过滤的选项列表。
- 在成功函数中,我尝试通过 .html() 将 Ajax 调用的结果注入到第二个选择中,但它不起作用。如何注入 JSTL?换句话说,如何在 selectWorkplace 中注入 wpFilteredList 的内容? ✕
我尝试了什么:
- 使用 JSON -> 无效 ✕
- 在 JSP 中使用 JAVA 脚本 -> 无效 ✕
JSP
html:
<div class="row">
<div class="col-md">
<label style="font-size: 20px;">Schraubfall ID: </label>
<select id="selectSchraubfall" name="selectSchraubfall" form="formResult" class="form-control" >
<option>Select ID</option>
<c:forEach items="${screwdriverlist}" var="screwdriverlist">
<option><c:out value="${screwdriverlist.screwdriverid}" /></option>
</c:forEach>
</select>
</div>
<div class="col-md">
<label style="font-size: 20px;">Workplace: </label>
<select id="selectWorkplace" name="selectWorkplace" form="formResult" class="form-control">
<option>Select workplace</option>
<c:forEach items="${workplaceList}" var="workplaceList">
<option><c:out value="${workplaceList.workplacename}" /></option>
</c:forEach>
</select>
</div>
</div>
JS:
var options="";
$("#selectSchraubfall").on('change',function(){
var value=$(this).val();
resultSelectValue('Schraubfall', value);
});
function resultSelectValue(columnName, value) {
// Statements
var params = {};
params.colname = columnName;
params.valuecol = value;
$.ajax({
type: "GET",
url: 'ResultSelectValuesController',
data: params,
success: function (data) {
var workplaceArray = [];
$("#selectWorkplace").empty().html();
<c:forEach items="${wpFilteredList}" var="wpFilteredList">
//<option value="${wpFilteredList.name}"></option>
workplaceArray.push('"${wpFilteredList.name}"');
</c:forEach>
$("#selectWorkplace").html(workplaceArray); //I know this is not correct but how can I do something similar using the wpFilteredList?
},
error : function(ex) {
swal("Error", "Error loading workplace info " + ex.Message, "error");
}
});
}
Java (ResultSelectValuesController)
@Override
public void processMethodGET(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
String colname = request.getParameter("colname");
String valuecol = request.getParameter("valuecol");
if(colname.contains("Schraubfall")) {
//GET WORKPLACES
workplacesfilteredlist = wcdao.workplacesListFilter(colname, valuecol);
request.setAttribute("wpFilteredList", workplacesfilteredlist);
}
request.getRequestDispatcher("/Views/Results/ResultPage.jsp").forward(request, response);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
processError(e, request, response);
}
}
【问题讨论】:
-
您可以在此处使用
gson,即:将您的列表转换为gson 将其发送到ajax 调用,然后使用for循环遍历它。 -
这就是我现在正在尝试但没有成功的方法:(
-
什么不起作用?你有什么错误吗?
标签: javascript java ajax jsp jakarta-ee