以最常见的获取账号列表为例子:
引入标签,prefix可以理解成别名,或者对象,使用时类似对象.成员。
<%@ taglib prefix="pe" uri="/WEB-INF/tlds/powerengine2.tld"%>
这里可以理解成jsp中的k/v,通过tld中的k映射到java中属性值。也可以理解成声明,因为牵涉到jsp到java数据的流动,还是kv好些。
<tr align="left" valign="middle" id="localbank">
<td height="23" nowrap class="tdTitle">原绑定卡号/账号</td>
<td align="left" nowrap class="tdValue" colspan="4" onchange="selectAcNo(this.value)"><select
name="AcNoAlias" onChange="selectAcNo(this.value)">
<pe:optionEx listResolverId="AcACList" input="AcNo"
optionName="id,aliasName,bankAcType,name"
constantPrefix=",,BankAcType,"
optionValue="id,type,bankAcType,currency.id,currency.type,currency.id,name,currency.type"
valuePrefix=",,,Currency,CRFlag,," currentValue="${AcNo}" />
</select></td>
</tr>
标签的理解百度即可,入门级这里写业务逻辑,一般这里当做xml解耦
<tag> <name>optionEx</name> <tag-class>com.csii.pe.channel.http.tag.OptionExTag</tag-class> <body-content>empty</body-content> <attribute> <name>listResolverId</name> </attribute> 。。。。。。。。。。
OptionExTag.class接口多态机制,接口的引用指向实例化对象,该出实例化是在mergedPool池中获取的。
listResolverId是注入的beanid,一般spring都是注入和getbeanid两步骤。
resolver对象是实例<bean name="AcACList" class="com.csii.ibs.accesscontrol.AcAccessControlListResolver" >
List items = null; ListResolver resolver = mergedPool.getListResolver(this.listResolverId); if (resolver != null) { items = resolver.getList(context, inputData, extraData, this.defaultRuleDef); }
resolver.getList();还是获取的user
public List getList(Context paramContext, Object paramObject1, Object paramObject2, String paramString) { IbsUser localIbsUser = (IbsUser)paramContext.getUser();
其实账户管理中的账号列表都是直接拿user数据了。例如
<pe:option items="${_USER.accounts}" optionName="id,bankAcType,name" constantPrefix=",BankAcType" optionValue="id,type,bankAcType,currency.id,currency.type,currency.id" valuePrefix=",,,Currency,CRFlag" currentValue="${AcNo}" condition=‘ "1D".indexOf(type)!=-1 and subCifNo==null‘/>
题外话谈下el表达式,el仅仅是一种简化形式,例如pagecontext.request...等等,mvc将数据分离后,只要数据流到了view层,el都能表示的,常见的context只是一种常用的获取方式,适配器把传递参数都封与此,user也常用,是首次登陆拿的puser和paccount表数据。