以SSH案例来讲,在个人Action中定义了两个map集合,使用Strust2的Prepareable拦截器接口,此处为初始化gradeMap和departmentMap集合,html
实现这个接口的prepare()方法,这个方法会在action类的全部方法执行前执行,另外咱们也能够按照它的规则来写一些其它形式的prepare方法,java
例如aciton中有一个方法叫input(),那么咱们能够实现一个prepareInput方法,这样在input()执行前,会执行prepareInput()方法。运维
public class EmployeeAction extends ActionSupport implements Preparable { private Employee employee; private String department_id; private static Map<String, String> gradeMap; private static Map<String, String> departmentMap; private static String str; @Autowired private EmployeeService employeeService; @Autowired private DepartmentService departmentService; HttpServletRequest request = ServletActionContext.getRequest(); @Override public void prepare() throws Exception { gradeMap = new HashMap<>(); gradeMap.put("1", "总经理"); gradeMap.put("2", "项目经理"); gradeMap.put("3", "高级开发工程师"); gradeMap.put("4", "中级开发工程师"); gradeMap.put("5", "初级开发工程师"); departmentMap = new HashMap<>(); departmentMap.put("1", "财务部"); departmentMap.put("2", "人事部"); departmentMap.put("3", "运维部"); departmentMap.put("4", "测试部"); departmentMap.put("5", "开发部"); departmentMap.put("6", "技术部"); }
public String XXX(){
...
request.setAttribute("gradeMap", gradeMap);
request.setAttribute("departmentMap", departmentMap);jsp
}
}
对于这Employee员工类,在查看员工列表信息时,经过service层调用持久层查到的员工列表,将其放入域对象,在页面中使用jstl标签的ide
<c:forEach items="${emps }" var="emp">来进行遍历。因为EL不能嵌套使用,因此具体作法以下jsp学习
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%> <%@ page import="java.util.Map"%> <%@ page import="java.util.*"%> <% Map<String, String> departmentMap = (Map<String, String>) request.getAttribute("departmentMap"); Map<String, String> gradeMap = (Map<String, String>) request.getAttribute("gradeMap"); System.out.println(request.getAttribute("str")); %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>员工列表</title> </head> <body> <table> <thead> <tr> <td>员工名</td> <td>员工邮件</td> <td>员工薪水</td> <td>入职时间</td> <td>员工密码</td> <td>员工级别</td> <td>所属部门</td> </tr> </thead> <tbody> <c:forEach items="${emps }" var="emp"> <c:set value="${emp.grade}" var="gradekey" scope="request" /> <c:set value="${emp.department.id}" var="departkey" scope="request" /> <tr> <td>${emp.name }</td> <td>${emp.email }</td> <td>${emp.salary }</td> <td>${emp.hiredate }</td> <td>${emp.pwd }</td>
<%-- 以前居然煞笔的使用 ${gradeMap['${emp.grade}']}之类的写法根本取不到,可是若是key是具体的String或者Integer则能够取到
${gradeMap['1']} -->总经理 总之具体状况具体对待
--%>
<td> <% out.print(gradeMap.get(request.getAttribute("gradekey"))); %> </td> <td> <% out.print(departmentMap.get(String.valueOf((request.getAttribute("departkey"))))); %> </td> </tr> </c:forEach> </tbody> </table> </body> </html>
对action中初始化的map集合使用 <c:set value="${emp.grade}" var="gradekey" scope="request" /> 标签 使用out内置对象将其取出测试