JSP中EL表达式嵌套

  1. EL表达式是不能嵌套的,即不能写成${ ${} }或${xxx.[xxx.xxx]}
  2. 当你的**是Map时,可以写成${**[xxx.xxx]}
  3. 其余的单个属性直接${xxx}
  4. 对象中的属性${xxx.xxx},如果对象中又有对象依此类推类似Struts2中ONGL(对象导航图)
  5. 顺便写个自己学习中遇到的案例问题,结合上面及其他各位大神的博客最终解决

        以SSH案例来说,在我的Action中定义了两个map集合,使用Strust2的Prepareable拦截器接口,此处为初始化gradeMap和departmentMap集合,

实现这个接口的prepare()方法,这个方法会在action类的所有方法执行前执行,另外我们也可以按照它的规则来写一些其它形式的prepare方法,

例如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);

   }
}

 对于这Employee员工类,在查看员工列表信息时,通过service层调用持久层查到的员工列表,将其放入域对象,在页面中使用jstl标签的

 <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内置对象将其取出

 

转载于:https://www.cnblogs.com/lc0814/p/8384600.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值