我正在开发一个项目,并使用Struts2和JSP。在一个JSP页面中,我有两个下拉列表,例如dd1和dd2。 dd2可靠dd1。应根据dd1值填充dd2中的值。现在我有一个java类,它为数据库中的下拉列表提供了所有选项,我使用SELECT标记在JSP中显示它们。如何让dd2在dd1上可靠?我对Ajax没有任何了解。请帮忙。
答案 0 :(得分:1)
不是任何Ajax插件的忠实粉丝。如果你不想使用任何大型的Ajax标签,并准备学习一些JQuery或任何其他java脚本框架,我建议你使用简单的ajax调用
当父级下拉列表中的值调用函数并对您的操作进行Ajax调用时,可以使用事件来处理事件,该操作可以返回JSON格式的值(使用struts2 JSON plugin),解析JSON数据并填写另一个下拉列表。
这种方法的好处是
以下是建议的示例
<s:select list="states" label="State" name="state" onchange="ajaxCallForDistrict();"
id="stateList"></s:select>
<s:select list="districts" label="District" name="district" id="district" />
我在这里做的是,区域依赖于状态,所以一旦用户从第一次选择中选择一个状态我在onchange
事件上调用java脚本函数,这是我的ajaxCallForDistrict()
函数< / p>
function ajaxCallForDistrict()
{
var selectedState = document.getElementById("stateList");
var statedata = selectedState.options[selectedState.selectedIndex].value;
var formInput='state='+statedata;
$.getJSON('search/getDistricts',formInput,function(data) {
$('.result').html('' + data.districts + '');
$.each(data.districts,function(index, value){
var districtid = document.getElementById("district");
var option=new Option(value,value);
try{
districtid.add(option);
}
catch(e){
districtid.appendChild(option);
}
});
});
}
我在上面的函数中做的是我获取所选状态的值并向getDistricts
Action发出Ajax调用,这只是为提供的状态创建一个区列表并返回结果为JSON数据。
为了填充区域选择我循环结果(JSON)并在选择框中附加元素
答案 1 :(得分:0)
JSP是内部的servlet,因此在将响应发送到客户端之后无法进行交互
我建议struts2-jquery-plugin - 你将能够使用ajax解决这个问题,如果你对学习javascript(jQuery)不感兴趣,这个框架是个好地方,showcase
答案 2 :(得分:0)
我不确定但是这可以帮助你...
jsp page
<s:select name= "" lable = "" onchange="javaScriptFunction(element that you have selected);"></s:select>
的JavaScript ---
<script>
function javaScriptFunction(element)
{
document.LoginForm.action=element+".action";
document.LoginForm.submit();
}
</script>
现在将这些操作映射到struts.xml中
我的建议是使用一种动作,但使用几种不同的方法
之后,使用s:iterator
填充其他下拉框。