开发中用到了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>
本文介绍在使用Freemarker模板引擎时,如何处理多选框(select multiple)的数据回显问题,包括使用contains方法进行简单匹配及处理ID列表匹配的复杂情况。
1268

被折叠的 条评论
为什么被折叠?



