刷新 <s:select> 更改 Struts 2 中支持 Java 集合的标签

问题描述 投票:0回答:2

我正在使用两个

<s:select>
标签,并且 Java 集合
List
位于其列表属性中。

更改后,我想填充第二个下拉列表。我为此使用了 jQuery,它称为操作 bean,并在返回时用 JSON 响应填充列表,然后在第二个下拉列表中设置值。一切正常。 JQuery 代码如下所示。

$(document).ready(function () {
    $('#projectNameBox').change(function (event) {
        var projectNameBoxVal = $("select#projectNameBox").val();
        alert(projectNameBoxVal);
        $.getJSON('getPackageListAction.action', {
            "projectId": projectNameBoxVal
        }, function (jsonResponse) {
            alert(jsonResponse);
            var packageNameSelectBox = $('#packageNameBox');
            packageNameSelectBox.find('option').remove();
            $.each(jsonResponse, function (key, value) {
                $('<option>').val(key).text(value).appendTo(packageNameSelectBox);
            });
        });
    });
});

现在我担心的是,当我通过调用第一个支持列表的更改操作来更新第二个支持列表时,为什么我必须使用下面的代码来设置选项数据?

var packageNameSelectBox = $('#packageNameBox');
packageNameSelectBox.find('option').remove();
$.each(jsonResponse, function (key, value) {
    $('<option>').val(key).text(value).appendTo(packageNameSelectBox);
});

我们可以刷新组件来反映支持列表的更改吗?

java jquery jsp struts2 double-select
2个回答
0
投票

该代码用于修改第二个

select
对象的 HTML DOM 元素,以反映数据模型中的更改。如果是 double select 场景,那么您应该重新填充第二次选择的数据,并将其返回到
json
结果中。

您在 Ajax 调用中传递参数

projectId
,当您通过第一个选择框进行选项选择时,该参数应由 value 属性中的第一个
select
设置。此参数设置为操作属性,您可以使用该属性重新填充第二个选择框的地图。

数据已制成一对多关系(项目<- Package), so you can have different packages for the single project.

一旦设置了

projectId
的参数,您就只能查询属于该项目
id
且等于包
projectId
的包。

当第二个选择框的数据准备就绪时,您将返回

json
结果,该结果将与第二个选择框对应的属性序列化为 JSON 对象。

每个选择框应该有不同的操作属性。这有助于限制 json 输出以仅序列化第二个选择框的属性。

一旦 JSON 返回给客户端,您就需要修改第二个选择框的 DOM,它无法根据您在 Ajax 回调中收到的 JSON 来更新自身。

您可以通过代码示例查看答案:在 Struts2 中使用 AJAX 根据另一个选择菜单填充一个选择菜单


0
投票

选择组件(与页面中的任何其他对象一样)对其创建方式一无所知。一旦组件生成,它就不再与服务器端有任何类型的连接。

然后您需要更改其 HTML(以及 DOM)来对其进行更改,没有什么比刷新一堆文本、“html 关键字”更好的了。

有一些工具可以通过向程序员提供更简单的界面来隐藏这种复杂性(但是您已经处理过,如果该代码来自您而不是您的同事)。他们在幕后做同样的事情,但他们会节省你的工作。

一个例子是 Struts2-jquery-plugin; 看一下双选的代码

考虑到使用该插件,您将需要停留在 S2 技术上,而学习原始 jQuery 将在将来更改框架(JSF2、SpringMVC、ecc)甚至语言/平台(C# / .NET 等)时帮助您。 ..).

© www.soinside.com 2019 - 2024. All rights reserved.