Java开发表单字段的联动与依赖功能

1. 简介

随着web应用的越来越复杂,表单的内容也越来越丰富,这就需要表单字段之间的联动和依赖。

2. 前端实现

2.1 JSP页面

JSP页面中的表单元素,需要添加相应的JavaScript代码,实现表单字段之间的联动和依赖。下面是一个简单的例子:

<form>

<label>汽车品牌:</label>

<select id="brand" onchange="changeBrand()">

<option value="1">奔驰</option>

<option value="2">宝马</option>

</select>

<br><br>

<label>汽车型号:</label>

<select id="model">

<option value="1" class="1">GLC</option>

<option value="2" class="1">C级</option>

<option value="3" class="2">5系</option>

<option value="4" class="2">7系</option>

</select>

</form>

<script type="text/javascript">

function changeBrand() {

var brand = document.getElementById("brand").value;

var city = document.getElementById("model");

for (var i = 0; i < city.options.length; i++) {

city.options[i].style.display = "none";

if (city.options[i].getAttribute("class") == brand) {

city.options[i].style.display = "";

}

}

city.value = city.options[0].value;

}

</script>

上面的代码展示了两个下拉菜单:汽车品牌和汽车型号,当选择不同的品牌时,会根据品牌显示不同的型号。比如选择奔驰时,只能选择GLC和C级,而不能选择5系和7系。

在这段JavaScript代码中,我们使用了onchange事件,当汽车品牌发生变化时,就会执行changeBrand()函数。

函数实现的就是选择汽车型号的过程:根据当前选择的汽车品牌,隐藏不属于该品牌的型号,然后默认选择第一个型号。

2.2 jQuery插件

如果使用jQuery库,可以使用各种插件实现表单联动和依赖功能。这里介绍一个比较好用的jQuery插件——jQuery-Dependent-Fields。

jQuery-Dependent-Fields就是实现表单字段之间联动和依赖的一个jQuery插件。使用它可以避免手写JavaScript代码,简化开发工作。

下面的代码展示了如何使用jQuery-Dependent-Fields实现汽车品牌和汽车型号的联动:

<form>

<label>汽车品牌:</label>

<select id="brand">

<option value="1">奔驰</option>

<option value="2">宝马</option>

</select>

<br><br>

<label>汽车型号:</label>

<select id="model" data-dependent-field='{"source":"#brand","items":{"1":[ "GLC", "C级"],"2":["5系","7系"]}}'>

</select>

</form>

<script type="text/javascript">

$(function() {

$('#model').dependentFields({

source : '#brand',

items : {

"1" : [ "GLC", "C级" ],

"2" : [ "5系", "7系" ]

}

});

});

</script>

在上面的代码中,我们使用了data-dependent-field属性,用来存储关于联动部分的数据。当选择不同的品牌时,会根据相应的数据刷新下拉菜单中的选项。

使用jQuery-Dependent-Fields能省去很多手写代码的麻烦,大大提高了开发效率。

3. 后端实现

3.1 Struts2框架

在Struts2框架中,我们可以使用一个叫做Struts2-jQuery的插件来实现表单联动和依赖。

下面的代码展示了如何使用Struts2-jQuery插件实现汽车品牌和汽车型号的条理:

<sj:select href="%{ajaxUri}" id="brand" list="{'奔驰','宝马'}" onChangeTopics="refresh" emptyOption="false" headerValue="0" headerKey="-1"/>

<sj:select href="%{ajaxUri}" id="model" list="%{modelList}" formIds="brand" reloadTopics="refresh" emptyOption="false" headerValue="0" headerKey="-1"/>

<script type="text/javascript">

$.subscribe('refresh', function(event,data) {

$.publish('load-models');

});

$.subscribe('load-models', function(event,data) {

var url = "%{baseurl}/ajax/loadModels";

$.get(url, { brand : $('#brand').val() }, function(responseData) {

$('#model').html(responseData);

});

});

</script>

在这个例子中,我们使用了两个标签:sj:select标签和sj:a标签。这些标签有关联的下拉菜单,sj:select标签依赖于sj:a标签的onClick事件。

当用户选择一个品牌时,就会出发onChangeTopics,这个事件的作用是发布一个refresh事件,再由subscribe订阅,最后发出一个load-models事件。

我们在load-models事件处理函数中,使用了jQuery的get方法来获取汽车型号的列表,并根据它更新页面上的“汽车型号”下拉列表菜单的内容。

3.2 Spring MVC框架

在Spring MVC框架中,我们可以使用Spring的Form标签库来实现表单字段的联动和依赖。

下面的代码展示了如何使用Spring Form标签库实现汽车品牌和汽车型号的联动:

<form:select id="brand" path="brand" onchange="onBrandChange()">

<form:option value="" label="--请选择--" />

<form:option value="1" label="奔驰" />

<form:option value="2" label="宝马" />

</form:select>

<form:select id="model" path="model">

<form:options items="${modelList}" itemValue="id" itemLabel="name"/>

</form:select>

<script type="text/javascript">

function onBrandChange() {

var brand = $("#brand").val();

$.getJSON("getModels", { brand : brand }, function(data) {

var options = "";

$.each(data, function(index, option) {

options += "";

});

$("#model").html(options);

});

}

</script>

在这个例子中,我们使用了Spring的Form标签库,其中form:select标签用于创建带有选项的下拉菜单。在onchange事件中,我们使用jQuery的getJson方法来获取汽车型号的列表,并根据列表数据更新页面上的“汽车型号”下拉菜单的内容。

4. 结论

表单联动和依赖是现代web应用中不可或缺的一环。在前端,我们可以使用JavaScript框架和插件来实现;在后端,我们可以使用各种Java框架的标签库来实现。无论哪种方式,它们的本质都是为了提高应用的易用性和用户体验。

后端开发标签