在不提交表单的情况下,根据单个表单中另一个表单的输入填充下拉列表(SpringMVC+jsp)



我在.jsp文件中的一个表单中有两个下拉列表(form:select),我想根据第一个下拉列表的选择填充第二个下拉列表,但问题是我无法提交表单,因为我已经有了一个将表单值保存到DB的控制器映射。我知道这可以使用AJAX来完成(虽然我对AJAX不太熟悉,但我更喜欢后端开发)。所以我想找到一个暂时不使用AJAX的解决方案。我们非常感谢任何关于从哪里开始的建议,尽管这听起来可能是一个愚蠢的问题。

更新对应于我从Danny,得到的回复

我想我对建议的方法有意见,

"在客户端使用JQuery,它使用POST从Spring MVC控制器请求数据:"

问题是我已经有了一个表单提交控制器映射(POST),比如/saveUser.htm)

我也许会举个例子来解释我的问题。

这里有两个国家和省,

<form:select path="country" cssClass="dropdown" >
<form:select path="province" cssClass="dropdown" >

如果用户选择特定的国家,则该特定国家的省份应加载到第二个下拉列表中。

所以,如果我将第一个下拉列表(国家)更改为提交表单onChange,

<form:select path="country" cssClass="dropdown" onchange="document.forms['userForm'].submit();">

被调用的控制器映射将是

@RequestMapping(value = "/saveUser.htm" method=RequestMethod.POST)
public void saveUser(....)

而不是

@RequestMapping(value = "/getOptions" method=RequestMethod.POST)
@ResponseBody
public String getOptionds(HttpServletResponse response) 

不过。

谨致问候,Carl

在客户端使用JQuery,JQuery使用POST:从Spring MVC控制器请求数据

 $.post("/getOptions", function(options) {
     .each(options, function(val, text) {
            $('#mySelect').append(
                $('<option></option>').val(val).html(text)
            );
        });
 });

在服务器端:

@RequestMapping(value = "/getOptions" method=RequestMethod.POST)
@ResponseBody
public String getOptionds(HttpServletResponse response) {
String response = "{val1 : 'option1', val2 : 'option2'}"; 
return response;
}

我可能会错过一些细节,但这就是概念。希望能有所帮助。

试试这样的东西:

$.ajax({
    type: "POST",
    url: "someUrl",
    dataType: "json",
    data: {
        varname1 : "varvalue1",
        varname2 : "varvalue2"
    },
    success: function (data) {
        $('#selectName').empty(); // empty existing list
        $('#selectName').append('<option value="">Some Label</option>');
        $.each(data, function (varvalue, vartext){
            $('#selectName').append($('<option></option>').val(varvalue).html(vartext));
        });  
    }
});

这将使用这些(零个或多个/可选)数据参数为someUrl调用POST方法,当控制器成功返回时,将执行success函数。

然后,在您的控制器中执行如下操作(注意:对于有效的JSON,在任何字符串周围使用双引号-它们必须在java中转义):

@RequestMapping(value = "/someUrl", method=RequestMethod.POST)
@ResponseBody
public String getJsonData(@RequestBody String parameters) {
    String exampleData = "{"somename1":"somevalue1","somename2":"somevalue2"}";
    return exampleData;
}

@RequestMapping设置为/someUrl 的POST方法

@ResponseBody表示返回的字符串应用作数据

@RequestBody保存(可选)url/data参数,如下所示:"varname1=varvalue1&varname2=varvalue2"

您将不得不添加一些逻辑来创建包含第二个列表内容的JSON字符串,比如这样?

{"selectId1":"selectValue1","selectId2":"selectValue2",..."selectId9":"selectValue9"}

然后,选择将填写这样的选项:

<option value="">Some Label</option>
<option value="selectId1">"selectValue1"</option>
<option value="selectId2">"selectValue2"</option>
...
<option value="selectId9">"selectValue9"</option>

最新更新