freemaker的多栏纵向复选框列表组件。

环境:使用fm是2.3.9,webwork2.2.4(使用切换语法):
一:作为components组件的参数如果值为字符串,则需要在字符串上加上单引号。
<ww:component template="checkboxlist_portraitCols.ftl">
 <ww:param name="name" value="'test'" /><!--注意单引号-->
 <ww:param name="colCnt" value="4" />
 <ww:param name="list" value="{'1','2','3','4','5','6'}" />
</ww:component>

二:终于理解freemaker的多值类型。

<#if (parameters.list?size%parameters.colCnt)?int==0>:求余数是否为0,必须加上内置方法int。

freemaker内置了chunk分块的方法,但是我始终没有想到怎么将这个快按纵向进行排列。横向好说,直接按行输出。因此写下列模板代码来实现。

<#assign itemCount = 0/>
<#if parameters.list??>
 <#if (parameters.list?size%parameters.colCnt)?int==0>
  <#assign rowCnt=(parameters.list?size/parameters.colCnt)?int/>
 <#else>
  <#assign rowCnt=(parameters.list?size/parameters.colCnt)?int+1/>
 </#if>
 
 <#assign width=(100/parameters.colCnt)?int>
 
 <#assign itemCount = itemCount + 1/>(文章来源 www.iocblog.net)

 <#list 0..rowCnt-1 as row>
  <tr>
  <#list 0..parameters.colCnt?int-1 as col>
   <#assign itemCount = itemCount + 1/>
   <#if row==0 && col<parameters.colCnt-1 >
    <td width='${width}%'>
   <#else>
    <td>
   </#if>
    <#if row+col*rowCnt<parameters.list?size >
     <#assign item=parameters.list[row+col*rowCnt] />
     <#if parameters.listKey??>
      <#assign itemKey = item[parameters.listKey]/>
       <#else>
         <#assign itemKey = item/>
       </#if>
      
       <#if parameters.listValue??>
         <#assign itemValue = item[parameters.listValue]/>
       <#else>
         <#assign itemValue = item/>
       </#if>
       <#assign itemKeyStr=itemKey.toString() />
     <input type="checkbox" name="${parameters.name?html}" value="${itemKeyStr?html}" id="${parameters.name?html}-${itemCount}"<#rt/>
       <#if tag.contains(parameters.nameValue, itemKey)>
       checked="checked"<#rt/>
       </#if>
       <#if parameters.disabled!(false)>
       disabled="disabled"<#rt/>
       </#if>
     />
     <label for="${parameters.name?html}-${itemCount}" class="checkboxLabel">${itemValue?html}</label>
    <#else>
     &nbsp;
    </#if>
   </td>
  </#list> 
  </tr>(文章来源 www.iocblog.net)
 </#list>
 
<#else>
  &nbsp;
</#if>
jsp引用页面测试代码:
<table width="80%">
<ww:component template="checkboxlist_portraitCols.ftl">
 <ww:param name="name" value="'test'" />
 <ww:param name="colCnt" value="4" />
 <ww:param name="list" value="{'1','2','3','4','5','6'}" />
</ww:component>
</table>




文章整理:iocblog
版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。