我在.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>