【发布时间】:2012-02-09 10:46:34
【问题描述】:
我正在开发一个项目并使用 Struts2 和 JSP。在一个 JSP 页面中,我有两个下拉列表,分别是 dd1 和 dd2。 dd2 依赖于 dd1。 dd2 中的值应根据 dd1 值填充。现在我有一个 java 类,它为我提供了数据库中下拉列表的所有选项,我使用 SELECT 标记将它们显示在我的 JSP 中。如何使 dd2 依赖于 dd1?我对 Ajax 没有任何了解。请帮忙。
【问题讨论】:
标签: struts2
我正在开发一个项目并使用 Struts2 和 JSP。在一个 JSP 页面中,我有两个下拉列表,分别是 dd1 和 dd2。 dd2 依赖于 dd1。 dd2 中的值应根据 dd1 值填充。现在我有一个 java 类,它为我提供了数据库中下拉列表的所有选项,我使用 SELECT 标记将它们显示在我的 JSP 中。如何使 dd2 依赖于 dd1?我对 Ajax 没有任何了解。请帮忙。
【问题讨论】:
标签: struts2
不是任何 Ajax 插件的忠实粉丝。如果你不想使用任何花哨的 Ajax 标签并准备学习一点 JQuery 或任何其他 java-script 框架,我建议你使用简单的 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() 函数
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);
}
});
});
}
我在上述函数中所做的是,我正在获取选定状态的值并将 Ajax 调用传递给 getDistrictsAction,这只是为提供的状态创建一个区域列表并将结果作为 JSON 数据返回.
为了填充区域选择,我正在循环遍历结果 (JSON) 并将元素附加到选择框中
【讨论】:
JSP 内部是 servlet,因此在响应发送到客户端后无法进行交互
我会推荐 struts2-jquery-plugin - 你将能够使用 ajax 解决这个问题,如果你对学习 javascript (jQuery) 不感兴趣,这个框架是一个很好的起点,showcase
【讨论】:
我不确定,但这可能对您有帮助...
jsp页面
<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 填充另一个下拉框。
【讨论】: