【问题标题】:Dependable drop down list in JSP, Struts2JSP,Struts2中的可靠下拉列表
【发布时间】:2012-02-09 10:46:34
【问题描述】:

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

【问题讨论】:

    标签: struts2


    【解决方案1】:

    不是任何 Ajax 插件的忠实粉丝。如果你不想使用任何花哨的 Ajax 标签并准备学习一点 JQuery 或任何其他 java-script 框架,我建议你使用简单的 ajax 调用.

    当您的父下拉列表中的值更改调用一个函数并对您的操作进行 Ajax 调用时播放事件,该操作可以返回 JSON 格式的值(使用struts2 JSON plugin),解析 JSON 数据并填充另一个下拉菜单。

    这种方法的好处是

    1. 更灵活。
    2. 更轻更快。
    3. 无需添加任何联合国必需的依赖项。其他方法(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() 函数

    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) 并将元素附加到选择框中

    【讨论】:

    • 感谢您的回复。你能提供一些示例代码吗
    • 如果您提供一些代码来建议您正在做什么,这将有所帮助。一些将成为最终结果的 html 将是一个好的开始,并说明它的来源。
    • @Quaternion:同意!!!但我相信一个小的谷歌搜索会有很大帮助。但我完全同意一个小代码的解释比简单的单词更强大
    • 对不起 Umesh,很好的回答 +1,但我的意思是 OP 应该添加一些示例代码...
    • @Quaternion :) 我虽然你问过我,但无论哪种方式都是很好的建议。
    【解决方案2】:

    JSP 内部是 servlet,因此在响应发送到客户端后无法进行交互

    我会推荐 struts2-jquery-plugin - 你将能够使用 ajax 解决这个问题,如果你对学习 javascript (jQuery) 不感兴趣,这个框架是一个很好的起点,showcase

    【讨论】:

    • 感谢您的回复。您能否提供一些示例代码
    • 我的回复中有展示链接 - 在那里你可以找到一些例子
    • 只使用 jQuery 更容易。我们得到了很多“我如何使用 strus2-jquery-plugin 做 X”,并且所有认真的 web 程序员都使用 JS(以及任何选择的框架)。这个插件太有限了(可以说是任何基于 ajax 的标签库),所以结果是 OP 在这条路上会遇到更多的挫折。
    • 是的,它有限,是的,最好使用jquery + json插件,但是在他的实际情况下需要学习很多新东西,个人认为它非常有限不是更好,但他会得到至少有一些关于做什么的概述,你认为从某个地方复制粘贴 jQuery 示例是否更好 - 在这种情况下(下拉)框架将完成这项工作 - 说是的,人学习 1,2,3 技术是不好的那么你会有你的下拉菜单吗?
    【解决方案3】:

    我不确定,但这可能对您有帮助...

    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 填充另一个下拉框。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多