一、在FTL中使用下拉框,多数场景是从action中的List来获取下拉框的内容,然后通过ftl中的<#list>遍历出来。在遍历的过程中,还要判断value是否与特定在值,如相等,则选中。一个简单的下拉框搞的很复杂。
二、使用struts2中的select 标签可以很好的解决这个问题,先看代码:
<@s.select id="checkBrandLimit" cssClass="selectBig selectSearch" value="%{tempProduct.brand.id}" name="tempProduct.brand.id" list="inshopMerchantBrands"
listKey="brandId" listValue="brandName" headerKey=""
headerValue="--请选择--" οnchange="checkBrandLimitation(${ businessUserVo.merchantId },'%{tempProduct.brand.id}')" />
注:value的值:是选中某个<option> 对应的值,list:是actioin中定义List,listKey 是List中对象的属性,以这个属性为option 的value,listValue 是List中对象的属性,以这个属性为option的名称。headerKey 与headerValue 是下拉框的默认显示值。name 是提交到action中对应的属性。一行代码就可以搞定。
三、上面的代码中List值来自后台中Action的LIst ,还有一个场景:用户自己定义下拉框。代码如下:
<#assign contractType=r"#{'0':'0元购机','1':'购机送话费','2':'存一得三'}">
<@s.select id="contractTypeId" cssClass="" name="mobileContractManageRpcDto.contractType" list="${contractType}"
value="%{mobileContractManageRpcDto.contractType}" listKey='key' listValue='value' headerKey="" headerValue="所有" />
注:这个代码与上面的代码有两处不一样:1、自定义变量时“r”,这个关键关告诉ftl编译器,r 后面字符串是源生态 及raw类型, 不进行解释执行。List 的值是:${变量名},其他属性不变。
总结:在ftl中,尽可能多使用struts2的标签,struts2 标签有简单,且有最好的容错性。