根据 java spring 注解中 dropdown1 的选择填充 dropdown2

Populate dropdown2 based on the selection of dropdown1 in java spring annotation

Java 代码包含以下内容:

@ModelAttribute("countries")
public List<Country> initializeCountries() {

    List <Country> countries = countryService.findAllCountrys();

    return countries;
}  

我已经使用以下代码成功填充国家/地区:

<form:select path="country" id="country">
    <form:option value="">Select Country</form:option>
    <form:options items="${countries}" itemValue="countryCode" itemLabel 
     = "countryName" />
</form:select>
<form:errors path="country" cssClass="error"/> 

我有以下代码,它根据国家/地区代码获取州:

List <State> states = countryService.findAllStatesOfCountry(countryCode);

我应该如何编写 java 代码和 jsp 代码来根据选择的国家/地区填充州下拉列表。在 spring 注释中不使用 Ajax/javascript 有没有其他方法?试图找到这个选项。

如果不是请提及完整的细节,因为我在 Ajax 上尽力了。我是 Ajax 的新手,因此请分享要加载到 jsp 文件中的 maven 依赖项、js 和 css 文件。

不使用ajax也可以实现(虽然这里首选ajax/javascript)。

 <script language="javascript">
     function getStates(selectedCountry)
     {
    window.location.href='/getStates?country='+selectedCountry; 
     }

     </script>

<form:select path="country" id="country">
    <form:option value="">Select Country</form:option>
    <form:options items="${countries}" itemValue="countryCode" itemLabel 
     = "countryName" onchange="javascript:getStates(this.value)"/>
</form:select>

    <form:select path="state" id="state">
        <form:option value="">Select State</form:option>
<c:if test="${not empty states}" >
        <form:options items="${states}" itemValue="stateCode" itemLabel 
         = "stateName"/>
</c:if>
    </form:select>
  • onchange 属性添加到 javascript 函数调用。它会 获取选定的国家/地区值并将其传递给控制器 请求参数为 country。因此,在更改国家/地区时,将调用服务器以获取给定国家/地区的州,并刷新页面。
  • 添加了一个新的状态下拉列表 c:if,以便仅当存在属性 states 时才填充状态下拉列表 在请求中。

在控制器端,您将编写如下内容

    @RequestMapping("/getStates")
        public ModelAndView getStates(@RequestParam("country")String countryCode){
       ModelAndView mv = new ModelAndView("yourCurrentView");     
List<States> states = stateService.findAllStatesOfCountry(countryCode);
    mv.add("states",states);
    //to make sure countries drop down also has data
    mv.add("countries",countries);
    }