Spring 我可以在一个视图中多次访问同一控制器而不更改视图吗?
我正在使用SpringMVC。我有一个视图,根据从控制器调用的查询动态填充2个下拉列表。我想根据第一个下拉选择动态运行一个查询,以更改第二个下拉选择,这意味着再次访问控制器(我想)。我可以从同一视图多次访问控制器而不更改视图吗?例如,假设第一个下拉列表是美国各州的列表,第二个下拉列表是美国所有城市的列表,如果我从第一个列表中选择了NC,我希望将第二个列表更改为仅包括NC城市 以下是第一个下拉列表的示例:Spring 我可以在一个视图中多次访问同一控制器而不更改视图吗?,spring,model-view-controller,spring-mvc,Spring,Model View Controller,Spring Mvc,我正在使用SpringMVC。我有一个视图,根据从控制器调用的查询动态填充2个下拉列表。我想根据第一个下拉选择动态运行一个查询,以更改第二个下拉选择,这意味着再次访问控制器(我想)。我可以从同一视图多次访问控制器而不更改视图吗?例如,假设第一个下拉列表是美国各州的列表,第二个下拉列表是美国所有城市的列表,如果我从第一个列表中选择了NC,我希望将第二个列表更改为仅包括NC城市 以下是第一个下拉列表的示例: <select name = "states" onChange = "populat
<select name = "states" onChange = "populateCityList(this.options[this.selectedIndex].value)">
<option value ="*">All States</option>
<c:forEach items="${states}" var ="state">
<option value ="${state}">${state}</option>
所有国家
${state}
很简单,但我真的不知道从那里走到哪里。我现在可以在当前视图中调用Javascript函数,但我不知道这是否正确,甚至不知道在该函数中该做什么。神奇的词语是AJAX
JavaScript函数需要向控制器发出AJAX请求,理想情况下,控制器应该返回包含第二个下拉列表值的JSON数据结构。然后,JS函数应该有一个回调,该回调从控制器捕获JSON,并通过操作DOM填充下拉HTML。JQuery是一条路要走。网络上有很多例子,只要搜索一下就可以了。一个解决方案是将一些收集的数据移动到一个服务中,这样您的主控制器就可以在发送到视图之前使用该服务收集数据 Hi@user2033734您可以这样做:
JQuery
code
$(document).ready(function() {
$("#id1").change(function () {
position = $(this).attr("name");
val = $(this).val()
if((position == 'id1') && (val == 0)) {
$("#id2").html('<option value="0" selected="selected">Select...</option>')
} else {
$("#id2").html('<option selected="selected" value="0">Loading...</option>')
var id = $("#id1").find(':selected').val()
$("#id2").load('controllerMethod?yourVariable=' + id, function(response, status, xhr) {
if(status == "error") {
alert("No can getting Data. \nPlease, Try to late");
}
})
}
})
})
$(文档).ready(函数(){
$(“#id1”)。更改(函数(){
位置=$(this.attr(“名称”);
val=$(this.val()
如果((位置='id1')&&(值==0)){
$(“#id2”).html('Select…'))
}否则{
$(“#id2”).html('正在加载…')
var id=$(“#id1”).find(':selected').val()
$(“#id2”).load('controllerMethod?yourVariable=')+id,函数(响应、状态、xhr){
如果(状态=“错误”){
警报(“无法获取数据。\n请尝试延迟”);
}
})
}
})
})
和JSP
<table style="width: 100%;">
<tr>
<td width="40%"><form:label path="">Data 1: </form:label></td>
<td width="60%">
<form:select path="" cssClass="" id="id1">
<form:option value="" label="Select..." />
<form:options items="${yourList1FromController}" itemValue="id1" itemLabel="nameLabel1" />
</form:select>
</td>
</tr>
<tr>
<td width="40%"><form:label path="">Data 2: </form:label></td>
<td width="60%">
<form:select path="" cssClass="" id="id2">
<form:option value="" label="Select..." />
<form:options items="${yourList2FromController}" itemValue="id2" itemLabel="nameLabel2" />
</form:select>
</td>
</tr>
</table>
数据1:
数据2:
我希望能帮助你:)