开发中用到了select多选框,模板是freemarker,所以数据回显就要换一种方式解决。多选框返回的数据是一个用逗号分隔的字符串,比如“a,b,c”,回显的时候用contains判断从而决定是否对每个option进行checked。
<#if "a,b,c,"?contains("a")>
checked
</#if>
如果每个值都不同这样判断就行,但是往往不是这样,比如option的value是ID,就像"1,2,12,"
都会匹配上"2"
。所以这时就要改造下:
<#if ",a,b,c,"?contains(",a,")>
checked
</#if>
将字符串的首尾都加上逗号。
还有一种比较麻烦的,projectIdList是逗号分隔后的ID_list:
<select name="projectIds" multiple="multiple" class="comboxplus">
<#list projectList as project>
<#if projectIdList?? && projectIdList?size gt 0>
<#assign flag = 0/>
<#list projectIdList as idstr>
<#if idstr == (project.id?string)>
<option value="${project.id}" selected>${project.projectName}</option>
<#assign flag = 1/>
<#break>
</#if>
</#list>
<#if flag == 0>
<option value="${project.id}">${project.projectName}</option></#if>
<#else>
<option value="${project.id}">${project.projectName}</option>
</#if>
</#list>
</select>