JSP,Struts2中的可靠下拉列表

时间:2012-02-09 10:46:34

标签: struts2

我正在开发一个项目,并使用Struts2和JSP。在一个JSP页面中,我有两个下拉列表,例如dd1和dd2。 dd2可靠dd1。应根据dd1值填充dd2中的值。现在我有一个java类,它为数据库中的下拉列表提供了所有选项,我使用SELECT标记在JSP中显示它们。如何让dd2在dd1上可靠?我对Ajax没有任何了解。请帮忙。

3 个答案:

答案 0 :(得分:1)

不是任何Ajax插件的忠实粉丝。如果你不想使用任何大型的Ajax标签,并准备学习一些JQuery或任何其他java脚本框架,我建议你使用简单的ajax调用

当父级下拉列表中的值调用函数并对您的操作进行Ajax调用时,可以使用事件来处理事件,该操作可以返回JSON格式的值(使用struts2 JSON plugin),解析JSON数据并填写另一个下拉列表。

这种方法的好处是

  1. 更灵活。
  2. 光线充足,速度更快。
  3. 无需添加任何UN必需的依赖项。其他方法(IMO不是好的方法)使用Struts2-Jquery插件来完成它,但为任何不良行为或任何其他问题做好准备,你必须回复插件社区。

    以下是建议的示例

    <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填充其他下拉框。