Spring 我可以在一个视图中多次访问同一控制器而不更改视图吗?

Spring 我可以在一个视图中多次访问同一控制器而不更改视图吗?,spring,model-view-controller,spring-mvc,Spring,Model View Controller,Spring Mvc,我正在使用SpringMVC。我有一个视图,根据从控制器调用的查询动态填充2个下拉列表。我想根据第一个下拉选择动态运行一个查询,以更改第二个下拉选择,这意味着再次访问控制器(我想)。我可以从同一视图多次访问控制器而不更改视图吗?例如,假设第一个下拉列表是美国各州的列表,第二个下拉列表是美国所有城市的列表,如果我从第一个列表中选择了NC,我希望将第二个列表更改为仅包括NC城市 以下是第一个下拉列表的示例: <select name = "states" onChange = "populat

我正在使用SpringMVC。我有一个视图,根据从控制器调用的查询动态填充2个下拉列表。我想根据第一个下拉选择动态运行一个查询,以更改第二个下拉选择,这意味着再次访问控制器(我想)。我可以从同一视图多次访问控制器而不更改视图吗?例如,假设第一个下拉列表是美国各州的列表,第二个下拉列表是美国所有城市的列表,如果我从第一个列表中选择了NC,我希望将第二个列表更改为仅包括NC城市

以下是第一个下拉列表的示例:

<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:
我希望能帮助你:)