0

根据第一个下拉列表项选择,我想要第二个下拉列表应该包含相关内容。我怎么能在java中做到这一点?例如,假设第一个下拉列表包含国家名称,第二个下拉列表包含州名称。如果我选择一个特定的国家,比如“印度”,从第一个下拉列表中选择名称,那么第二个列表应该只显示国家的相关州,即“印度”的州。这两个列表都是动态的。

4

3 回答 3

0

这比 Java 和 struts 2 更像是 Javascript。

您可以通过两个选项获得一个 Map,其中第一个下拉列表的值作为键,另一个下拉列表的值与该项目相关。

Then when the first combobox's value is selected you can get the values form the javascript map and set it to the second dropdown.

其他选项是在第一个下拉列表的选择上发送一个 ajax 请求,并从结果中填充第二个下拉列表。

于 2013-04-05T09:20:29.717 回答
0

我建议为此使用javascript:

  • 使用 ajax,通过执行返回选项的 struts 操作,并重新加载您的select内容,例如使用 jquery:

    $("#stateSelect").load('http://host/myStateAction.do?country=' + country);

  • 或在页面加载时加载整个国家/地区映射,并使用纯 JavaScript 更新第二个列表,无需服务器调用。为此,您可以例如在每个国家/地区存储option一个data-states包含相应州的属性。

<option value="code" data-states="state1,state2,state3">countryName</option>

否则,如果您想避免使用 javascript,您可以在触发更改事件时提交表单,然后在服务器端(struts 操作)根据第一个列表的值填充第二个列表,然后重定向到表单页面。<select onchange="documents.forms['myForm'].submit()">

于 2013-04-05T09:21:46.380 回答
0

你必须像下面这样使用 JavaScript:
这比从 java 端处理更好:

这是您的示例 HTML 文件:

<select id="country" name="country" aria-required="true" class="required">
    <option value="">Select Your Country</option>
    <option value="USA">India</option>
    <option value="CA">Pakisthan</option>
</select>
<p><label for="state">Select Your State<span title="required">*</span>
</label></p>
<select id="state" name="state" aria-required="true" class="required">
    <option value="" selected="">Select Your State</option>
    <optgroup label="India">
        <option value="WB">West Bengal</option>
        <option value="BH">Bihar</option>        
    </optgroup>
    <optgroup label="Pakisthan">
        <option value="LH">Lahore</option>
        <option value="IB">Islamabad</option>
    </optgroup>
</select>

这是您的示例 JavaScript:

var stateVar = $('#state option, #state optgroup');
stateVar.hide();
$('#country').change(function () {
    stateVar.hide();
    $("#state optgroup[label='" + $(this).find(':selected').html() + "']")
        .children()
        .andSelf()
        .show();
});

你也可以使用 AJAX,它对你来说可能有点复杂,所以最好使用简单的 JavaScript。
您可以尝试这种方法,如有任何疑问,请告诉我。

于 2013-04-05T09:26:19.213 回答