1.问题详述
我们需要将后台servlet传来的数据在下拉框进行显示,并且数据是由查表获取来的,并且要讲封装好的对象数据进行去重处理。
我们这里的应用场景是员工管理系统,里面有员工表和部门表,员工表中有一个dept_name字段,对这个字段进行内容进行修改的时候,需要从部门表中将部门名称查出来封装成列表展示在jsp页面中。
2.解决方案
2.1 部门实体类中封装一个单独的dept_name构造器,以便后面使用
2.2 在controller中修改方法
1. 首先调用service层方法获取全部部门对象信息
List<Department> All_list = dept_ser.loadAll();
2. 然后遍历list封装dept_name
List<Department> list_1 = new ArrayList<>();
for(int i=0;i<All_list.size();i++){
String dept_name = All_list.get(i).getDept_name();
Department department = new Department(dept_name);
list_1.add(department);
}
3. 最后进行去重,将set转换为list再放入request域中
Set<Department> hashSet = new TreeSet<>(Comparator.comparing(e -> (e.getDept_name())));
hashSet.addAll(list_1);
ArrayList<Department> dept_list = new ArrayList<>(hashSet);
request.setAttribute("dept_list", dept_list);
2.3 前端动态生成option并对应取值+默认选中状态
直接上代码
<tr>
<td>部门 </td><td>
<select name="dept_name">
<option value="请选择">请选择</option>
<c:forEach items="${dept_list}" var="list">
<option value='${list.dept_name}' <c:if
test="${employee.dept_name==list.dept_name}"> selected="selected" </c:if>>
${list.dept_name}</option>
</c:forEach>
</select>
</td>
</tr>
3. 展示结果
数据库
部门表
员工表
可以看到部门中有两个重复的,现在展示前端显示
修改界面
完事~...............................!