其他

 

EL主要用于查找作用域中的数据,然后对它们执行简单操作;它不是编程语言,甚至不是脚本编制语言。通常与 JSTL 标记一起作用,能用简单而又方便的符号来表示复杂的行为。

 

1.EL表达式的格式:用美元符号($)定界,内容包括在花括号({})中;    例如: ${loginInfoBean.suser}

2.此外,可以将多个表达式与静态文本组合在一起以通过字符串并置来构造动态属性值;   例如:Hello {loginInfoBean.suser} ${loginInfoBean.spwd}

3.EL语法组成。EL表达式由标识符、存取器、文字和运算符组成。

 

        标识符用来标识存储在作用域中的数据对象。EL 有 11 个保留标识符,对应于 11个EL隐式对象。除了11隐式对象外,假定所有其它标识符都用来标识作用域的变量。

 

  EL中的11个隐藏对象:
  pageContext PageContext 实例对应于当前页面的处理
  pageScope 与页面作用域属性的名称和值相关联的Map类
  requestScope 与请求作用域属性的名称和值相关联的Map类
  sessionScope 与会话作用域属性的名称和值相关联的Map类
  applicationScope 与应用程序作用域属性的名称和值相关联的Map类
  param 按名称存储请求参数的主要值的 Map 类
  paramValues 将请求参数的所有值作为 String 数组存储的 Map 类
  Header 按名称存储请求头主要值的 Map 类
  headerValues 将请求头的所有值作为 String 数组存储的 Map 类
  cookie 按名称存储请求附带的 cookie 的 Map 类
  initParam 按名称存储 Web 应用程序上下文初始化参数的Map类

 

 

  例:
  ${abc} 相当于<%=pageContext.findAttribute(“abc”)%>
  ${og_1} <%=pageContext.findAttribute(“og_1”)%>
  …等等;就是说{}内的标识符除了11个保留字之外都表示作用域中的数据对应的名.

 

  如:${requestScope}中的requestScope是11个EL隐式对象之一,它不再表示作用域中数据,而是表示request作用域;

 

 

 

  EL存取器存取器用来检索对象的特性或集合的元素。 通过 “[]” 或 “.” 符号获取相关数据。

 

  例:
  ${userBean.suser} 或 ${userBean[“suser”]}
  //获取输出bean中的suser属性值;
  ${mcType[“id”]} //获取map中key为id对应的值;

 

  EL运算符允许对数据和文字进行组合以及比较。

 

  类别:

       算术运算符 +、-、*、/(或 div)和 %(或 mod)
  关系运算符 ==(或eq)、!=(或ne)、<(或lt)、>(或gt)、<=(或le) 和 >=(或ge)
  逻辑运算符 &&(或 and)、||(或or)和 !(或 not)
  验证运算符 empty
  (验证运算符(empty):对于验证数据特别有用。empty 运算符采用单个表达式作为其变量(也即,${empty input}),并返回一个布尔值,该布尔值表示对表达式求值的结果是不是“空”值。求值结果为 null 的表达式被认为是空,即无元素的集合或数组。如果参数是对长度为零的 String 求值所得的结果,则 empty 运算符也将返回 true)

 

  EL文字 表示固定的值 — 数字、字符、字符串、布尔型或空值。在 EL 表达式中,数字、字符串、布尔值和 null 都可以被指定为文字值。字符串可以用单引号或双引号定界。布尔值被指定为 true 和 false.

 

JSTL(JSP Standard Tag Library,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库,是由apache的jakarta小组来维护的。JSTL1.0 由四个定制标记库(core、format、xml 和 sql)和一对通用标记库验证器组成。core 标记库提供了定制操作,通过限制了作用域的变量管理数据,以及执行页面内容的迭代和条件操作。它还提供了用来生成和操作 URL 的标记。format 标记库定义了用来格式化数据(尤其是数字和日期)的操作。它还支持使用本地化资源束进行JSP页面的国际化。xml 库包含一些标记,这些标记用来操作通过XML表示的数据,而 sql 库定义了用来查询关系数据库的操作。 两个 JSTL 标记库验证器允许开发人员在其 JSP 应用程序中强制使用编码标准。

 

如果要使用JSTL,则必须引用jstl.jar和 standard.jar两个包。
为什么要用JSTL
  我们JSP用于开发信息展现页非常方便;也可以嵌入java代码(scriptlet、表达式和声明)代码用来实现相关逻辑控制。看下面程序。但这样做会带来如下问题:
  jsp维护难度增加;
  出错提示不明确,不容易调试;
  分工不明确;(即jsp开发者是美工,也是程序员);
  最终增加程序的开发成本;
  解决上面的问题可以使用定制标记库,JSTL使JSP开发者可以减少对脚本元素的需求,甚至可以不需要它们,从而避免了相关的维护成本。使分工更明确。

 

 

JSTL部署
  在EE应用程序中部署JSTL有两种方式:
  已存在的工程上部署
  将jstl.jar和standard.jar两个包考到现有工程
  WebRoot / WEB-INF / lib 目录下
  将相关的 .tld文件考到现有工程 WebRoot / WEB-INF 目录下;

 

  也可通过eclipse在已存在
  工程上部署
  新建工程的时候直接部署
  在JSP使用JSTL-core标签库
  core在jsp中的使用:
  在 web.xml 中添加
  <jsp-config>
    <taglib>
      <taglib-uri>http://java.sun.com/jsp/jstl/core</taglib-uri>
      <taglib-location>/WEB-INF/c.tld</taglib-location>
    </taglib>
  </jsp-config>
  在jsp文件中添加
  <%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>或<%@ taglib prefix="c" uri="/WEB-INF/c.tld" %>
  使用<c:out value=“HelloWorld” />

 

 

Core的操作作用域变量标签
  获取输出作用域中变量 :     <c:out > 属性: value [default] [escapeXml]
  定义作用域中变量 :         <c:set > 属性: value var [scope]
     删除作用域中变量:      <c:remove > 属性: var [scope]

Core的条件控制标签
  单分支条件  :       <c:if > 属性:test [var] [scope]
  多分支条件 :     <c:choose >

                                        <c:when > 属性: test
             <c:otherwise >

Core的其它标签
  输出转换成的URL :        <c:url > 属性:value [context] [var] [scope]  和  <jsp:include >相似用于包含其它页面的内容:
             <c:import >属性:url [context] [charEncoding] [var] [scope]
  重定向 :        <c:redirect >属性: url [context]   与  <c:url><c:import><c:redirect>配合使用,用于传参

                           <c:param >属性: name value

Core的循环控制标签
  实现简单循环 :      <c:forEach > var='item' begin='5' end='10' step='2‘ varStatus=‘’
  实现迭代(遍历) :      <c:forEach > items='' var='item‘ varStatus=‘’

  (属性varStatus和var相似设置一个作用域变量;只是varStatus作用域变量中存的是包括运行状态的对象;此对象包含如下属性 :  current index count first last begin end step

  简单循环
  <%@ page language="java" contentType="text/html; charset=GBK"%>
  <%@ taglib prefix="c" uri="/WEB-INF/c.tld" %>
  <html>
    <head>
      <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
      <title>testjstl1</title>
    </head>
    <body>
      <c:forEach var="i" step="1" begin="1" end="100">
        ${i} <br>
      </c:forEach>
    </body>
  </html>

  循环迭代
  <%@ page language="java" contentType="text/html; charset=GBK"%>
  <%@ taglib prefix="c" uri="/WEB-INF/c.tld" %>
  <html>
    <head>
      <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
      <title>testjstl1</title>
    </head>
    <body>
      <c:forEach var="mcBean" items="${mcList}" varStatus="mcStatus">
        当前遍历索引:${mcStatus.index} ; 商品名:${mcBean.sname} ; .... <br>
      </c:forEach>
    </body>
  </html>

在JSP使用JSTL-format标签库
  format在jsp中的使用:
  在 web.xml 中添加
  <jsp-config>
    <taglib>
      <taglib-uri>http://java.sun.com/jstl/fmt</taglib-uri>
      <taglib-location>/WEB-INF/fmt.tld</taglib-location>
    </taglib>
  </jsp-config>
在jsp文件中添加  <%@ taglib prefix="fmt" uri="http://java.sun.com/jstl/fmt" %>
  使用
  <fmt:formatDate value=“” pattern=“yyyy-MM-dd” />

Format常用标签
  格式化输出日期:
  <fmt:formatDate > value type var pattern
    type取值:
      short: 10/19/00 6:07 PM
      medium: Oct 19, 2000 6:07:01 PM
      long: October 19, 2000 6:07:01 PM MDT
      full: Thursday, October 19, 2000 6:07:01 PM MDT
  例: <fmt:formatDate value=“” pattern=“yyyy/MM/dd” />
  

  格式化输出数字:
  <fmt:formatNumber> value var pattern
  例:<fmt:formatNumber value=“” pattern=“###.##” />

  format实例
  <%@ page language="java" contentType="text/html; charset=GBK"%>
  <%@ taglib prefix="fmt" uri="/WEB-INF/fmt.tld" %>
  <html>
    <head>
      <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
      <title>testjstl1</title>
    </head>
    <body>
      <jsp:useBean id="curDate" class="java.util.Date" scope="page"/>
      <fmt:formatDate value="${curDate}" pattern="yyyy-MM-dd HH:mm:ss"/><br>

      <fmt:formatNumber value="10.32898432" pattern="#.##"/><br>
      <% request.setAttribute("var1",3.1415926); %>
      <fmt:formatNumber value="${var1}" pattern="#.##"/><br>
    </body>
  </html>

到这里我们对JSTL和EL之间的关系有了一定的认识,只要我们经常使用这些技术相信能很快的认识到这些技术的优缺点,比起死记硬背来说,理解才是真正的理解了.

 

2、json对象

 

1.Json和Map区别

 

       Json是一种特殊的Map,只是Json中的键值用冒号隔开,而Map中的是等号隔开.

 

    

 

1 {"vessel"="999","voyage"="SGQ0","imono"="010203"}          //Map格式

 

 

 

1 {"vessel":"999","voyage":"SGQ0","imono":"010203"}              //Json格式

 

在easyui中,对于map格式的数组,一般用List<Map<String,Object>>格式存放数据,如果知道对应的数据的model,可以直接用List<E(实体)>。

 

例如:

 

1 【{“vessel”="999","voyage"="SGQ0","imoNo"="010203"},{"vessel"="789",“voyage”=“GY”,“imoNo”=”010204”},{...}】

 

对于这样的一个数组,要区中里面的数据,只有将其付给list(一个逗号隔开一个List),在从list中取出每一个Map(一个括号对应一个Map)。在从Map中取出要的值。

 

而对于json格式的数据,则需要用JsonArray进行接收。

 

例如:

 

1 1 【{“vessel”:"999","voyage":"SGQ0","imoNo":"010203"},{"vessel":"789",“voyage”:“GY”,“imoNo”:”010204”},{...}】

 

 

 

1 String str = "{...}";
2 JsonArray  jsonArray = new JsonArray(str);
3 JSONObject Object = JsonArray.getJSONObject(i); 

 

posted @ 2017-12-13 21:28  George93  阅读(128)  评论(0编辑  收藏  举报