描述:在DWZ版中lookup的处理机制与经典的完全不同,对于lookup有两种展现形式,一种是通过点击lookup图标弹出对话框后带回选中的值,另一种是通过在文本框中输入相应信息从而实现联机式的查找带回效果。从实现目的来看,无非是让lookup的实体的主键值带回到hidden的一个元素中,而其它值只是作为显示参考之用,与底层的数据库结构与数据库表无关。一个完整的lookup由如下html元素构成:1)一个hidden用于保存带回实体主键的ID值;如果要实现缺省的lookup过滤或排序可以相应的pageInfo的hidden元素,具体实现方式的用例参见《HowTo手册》;2)n个text用于显示带回的多个数据带回项(注意:因为带回的数据项与数据访问层也就是数据库表无关,因此每个text的name都有一个hi_作为前缀);3)一个lookup有且只有一个主带回项,只有主带回项的文本框是可编辑的并且只有主带回项会有lookup图标也就是html的中的a元素。
扩展属性名 | 描 述 |
lookupGroup | lookup组可以理解为当前实体的名字,如果当前lookup组件是主实体中,则lookupGroup就是实体名,如果当前lookup组件在从实体(也就是明细表的lookup)中,则lookupGroup就是明细的集合属性名 |
lookupName | lookup名可以理解为当前lookup实体的属性名。从整体的DWZ框架来分析,实际上所有的tab都在一个IE窗口,也就是说JS文件在打开浏览器只会加载一次。这就产生了必须要保证每一个html元素的唯一性,即使是在不同的tab下也是如此。对于lookup来说,是通过lookupGroup+lookupName来确定元素的唯一性的。 |
suggestClass | 主带回项才会有该属性,实现联想查找带回 | 待lookup实体的POJO类的全限定名 |
searchFields | 查询过滤的属性名列表,以逗号分隔。例如带回HiUser,该属性的值为”fullName,userNum”,在文本框中001则平台会查询姓名或者是编号为001的所有用户 |
callback | 回调方法名,在查找带回值后系统会回调该属性的值的方法,以实现您对带回后的特殊处理。例如callback=fun,那么在带回值后系统会自动调用fun方法,并会自动传入两个参数fun(json,index),其中json:是带回的完整json对象,index:是索引值,主要用于明细的带回时要提供是第几条明细记录 |
场景描述:一个会员编辑页面要指定该会员所在的省份、城市、地区,要求在选择省份后会自动过滤该省份的城市,地区以此类推。
以下所有步骤只是修改OrganizationEdit.jsp文件,即可
步骤一、为省份的主带回项加callback回调方法,并在实现该js方法
<input type="text" class="textInput" name="organization.hi_province.name" value="${organization.province.name}" callback="processProvince"
function processProvince(json){
document.getElementById("pageInfo.province.f_id").value = json.id;
} //该方法的目的是在选择某个省份后将该省份的ID值放到指定的hidden元素中
步骤二、为城市加一个用于过滤的hidden元素,注意:processProvince()方法中的赋值语句就是该hidden元素;用于过滤的name必须与PageInfo的具体类相对应;必须要指定lookupGroup与lookupName
<input type="hidden" lookupGroup="organization" lookupName="city" name="pageInfo.province.f_id" id="pageInfo.province.f_id" value=""/>
步骤三、为城市的主带回项加callback回调方法,并在实现该js方法
<input type="text" class="textInput" name="organization.hi_city.name" value="${organization.city.name}" callback="processCity"
function processCity(json){
document.getElementById("pageInfo.city.f_id").value = json.id;
}
步骤四、为地区加一个用于过滤的hidden元素
<input type="hidden" name="pageInfo.city.f_id" id="pageInfo.city.f_id" lookupGroup="organization" lookupName="region" value=""/>
总结:级联下拉实际上是lookup的一个变种形式,主要的思想是为你要级联的下拉的lookup加入过滤项,例如在城市加一个省份的过滤项,在选择省份时后,会通过回调方法将这个过滤项的值存到该过滤项中。这样逐级过滤就实现了级联下拉的效果.