首先,在控制層得到所有的福利集合,員工對應的福利集合,代碼如下
List<Welfare> welfareList = welfareService.getAllWelfares(); // 獲取所有的福利集合
List<Welfare> empWelfareList = emp.getWelfareList(); // 獲取員工擁有的福利的集合
然後,可以在控制層把empWelfareList集合中的每一個福利的名稱取出來,放到一個新的集合中,並且綁定request對象,代碼如下
List<String> welfareNameList = new ArrayList<String>(); // 存放員工擁有福利的名稱
for (int i = 0; i < empWelfareList.size(); i++) {
welfareNameList.add(empWelfareList.get(i).getWelfare_name());
}
request.setAttribute("welfareList", welfareList);
request.setAttribute("welfareNameList", welfareNameList);
然後在jsp頁面進行
<tr>
<td align="right" style="font:16px bold 微軟雅黑">福利</td>
<td style="font:16px bold 微軟雅黑;width: 160px;height: 20px">
<!-- 將員工福利名稱集合轉換爲字符串,並通過set設置到變量empWelfareList中 -->
<c:set var="empWelfareString"
value="<%=(request.getAttribute(\"welfareNameList\")).toString() %>"/>
<!-- foreach循環遍歷所有的福利 -->
<c:forEach var="welfare" items="${welfareList }">
<c:choose>
<!-- 當循環的福利的名稱是員工福利字符串的子字符串,則複選框選中 -->
<c:when test="${fn:contains(empWelfareString,welfare.welfare_name) }">
<input type="checkbox" value="${welfare.welfare_id }" checked/>
${welfare.welfare_name }
</c:when>
<!-- 否則說明員工沒有該福利,複選框不選中 -->
<c:otherwise>
<input type="checkbox" value="${welfare.welfare_id }" />
${welfare.welfare_name }
</c:otherwise>
</c:choose>
</c:forEach>
</td>
</tr>
最後效果如下圖:
、