Ajax 级联标签
Auther:pandabrother 熊猫哥哥
说明:该代码仅仅做为初学者参考,让高手贻笑大方了。该代码在我们项目中已经使用,应该没有什么大的问题。本人水平有限,贴出来主要是实在没有百度文档积分了。有什么更好的办法或代码欢迎指点迷津。
第一章基本思想
[一] 原理:
将级联操作抽象出来,可以分为以下几个过程或步骤:
1得到构建当前级联所需的参数。
2构建当前级联列表(通过调用dao方法) 。
3自身数据构建完成后,触发后置表单对象。
[二] 存在问题:
I)这是我写的第一个标签,存在问题主要是对js事件机制不是很了解,如果能自己构建事件对象,然后给特定的表单对象绑定的话,那么整个级联及触发会更加对象化。这一方面,可能是我设计考虑不完善,另一方面也有HTML表单本身的问题。比如:下拉onchange 事件触发后,lectobj.value 是更改选项后的值,不是原来的值,这是一个麻烦的事情。还有,onchange事件不好用代码触发的问题。
II) 本代码可以修改后,可以用于各种控件级联,不仅仅是lect级联。数据没有编码,用ba64编码后传输。
[三] 功能
I)支持页面多组级联。
II)支持编辑页面,初始化直接生成数据,不必调用ajax。
[四] 过程:
曲江海洋极地公园I)新增页面:
一般来说,第一级级联会生成数据。所以第一级级联会由数据库生成数据,而不必调用ajax 来生成。标签如下:
<linkSelect:slk optv='' paraStringArray="<%=null%>" fireEventIds="province" tagName="country" paraObjectIds="" buildType="buildcountry"/>
paraStringArray:由数据库构建下拉的方法,所需要的参数。
Dao :public List buildCountry() ,因为国家不需要参数,所以paraStringArray=”null” ;
paraObjectIds:AJAX级联,通过js从JSP页面上得到其他控件的值。paraObjectIds。HTML 控件的id。
fireEventIds:就是当自身数据构建完成后,需要触发的后置对象的id。支持触发多个后置控件。
II)编辑页面:
<linkSelect:slk optv='17703' paraStringArray="<%=arr%>" lectAllName="--请选择间隔--" isSelectAll="true" fireEventIds="equip_id;equip_id2;equip_id3" tagName="space_id" paraObjectIds="organid;trans_id" buildType="subspace"/>
Optv:option默认被选中的值。
第二章所需文件
[一] Tld 文件:linkage.tld
<?xml version="1.0"encoding="UTF-8"?>
<!DOCTYPE taglib
PUBLIC"-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"
"/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
go的过去分词
<!-- a tab library descriptor -->
<taglib>
<tlibversion>1.0</tlibversion>
<jspversion>1.1</jspversion>
<shortname></shortname>
<tag>
<!--lect linkage tag by panda -->
<!--
tagName: obj idname;
isCode: if fal lect options's value=text=name
isHead: independence lector not linkaged by other obj
paraObjectIds: getElementsValuesByIds();
《荷》古诗ajaxType: reference
com.pandabrother.framework.cps.util.AjaxLinkutil.java
fireEventIds: multiple fireEvents
optv: init option value;
indexvalue: option[indexvalue].lected;
lectAllName: 请选择 value:'-1'
lectAllCode: -1 default
isLeaf: ifLeaf Node of Linkage Selector 是否是叶子节点,这是为了当完全加载完成后,再次调用TO_VIEW()方法准备的。建议所有级联的叶子选项全部标记这个属性为true;
aflinkage: [onchange手动触发]
bflinkage: [onchange手动触发]
bfbuild:在自身下拉列表构建之前触发的函数![自动触发]
afbuild:在自身下拉列表构建之后触发的函数![自动触发]
paraStringArray:初始化参数数组!龟兹古国
showType :view or edit or add 如果是view必填,其他情况可以不填。
-->
<name>slk</name>
<tagclass>com.pandabrother.framework.cps.tag.SelectLinkage</tagclass> <bodycontent>empty</bodycontent>
<attribute>
<name>tagName</name>
<required>true</required>
</attribute>
<attribute>
<name>isHead</name>
<required>fal</required>
</attribute>
<attribute>
<name>isCode</name>
<required>fal</required>
</attribute>
<attribute>
<name>paraObjectIds</name>
<required>fal</required>
</attribute>
<attribute>
<name>buildType</name>
<required>fal</required>
</attribute>
<attribute>
<name>fireEventIds</name>
<required>true</required>
</attribute>
<attribute>
<name>optv</name>
<required>fal</required>
<rtexprvalue>true</rtexprvalue> </attribute>
<attribute>
<name>lectedIndex</name>
<required>fal</required>
</attribute>
幼儿园中班公开课
<attribute>
<name>lectAllName</name>
<required>fal</required>
</attribute>
<attribute>
<name>optwidth</name>
关于诗词的作文<required>fal</required>
</attribute>
<attribute>
<name>isSelectAll</name>
<required>fal</required>
<rtexprvalue>true</rtexprvalue> </attribute>
<attribute>
老师日记<name>isLeaf</name>
<required>fal</required>
</attribute>散散心
<attribute>
<name>factoryName</name>
<required>fal</required>
</attribute>
<attribute>
<name>factoryMethod</name>
<required>fal</required>
</attribute>
<attribute>
<name>daoMethod</name>
<required>fal</required>
</attribute>
<attribute>
<name>bflinkage</name>
<required>fal</required>
</attribute>
<attribute>
<name>aflinkage</name>
<required>fal</required>
</attribute>
<attribute>
<name>fixed</name>
<required>fal</required>
<rtexprvalue>true</rtexprvalue> </attribute>
<attribute>
<name>bfbuild</name>
<required>fal</required>
<rtexprvalue>true</rtexprvalue> </attribute>
<attribute>
<name>afbuild</name>
<required>fal</required>
<rtexprvalue>true</rtexprvalue> </attribute>
<attribute>
<name>paraStringArray</name>
<required>fal</required>
<rtexprvalue>true</rtexprvalue> </attribute>
<attribute>
<name>showType</name>
<required>fal</required>
<rtexprvalue>true</rtexprvalue> </attribute>
<attribute>
<name>tag</name>
<required>fal</required>