jsp:bean与el表达式笔记
来源:互联网 发布:虫虫群发软件 编辑:程序博客网 时间:2024/06/09 13:49
使用jsp
- Scriptlet: <% %>
- 指令: <%@ %>
- 表达式: <%= %>
- jsp声明: <%! %>
指令会用来向容器提供特殊的指示,容器会把所有Script代码和表达式代码都放在服务方法中,所以scriptlet中声明的变量总是局部变量。另外,表达式事实上会成为out.println()的参数,所以不能以逗号结尾。
pageContext隐式对象含有指向其他三个域对象的引用,所以对于pageContext.findAttribute方法,会现在pageContext域中寻找相应的域属性,如果没有找到,会按照request->session->application的顺序依次查找。
jsp与javaBean
在jsp里面如果要建立多态的bean引用,那么就需要为<jsp:useBean>增加一个type属性代表引用类型,class里面则放置子类对象的名字,例如: “` “`
对于type和class的使用有以下原则:
- 如果仅使用了type,但没有class,bean必须已经存在。
- 如果使用了class(不管有没有type),class不能是抽象类,而且必须有一个无参公共构造器。
在静态页面通过表单直接转向jsp后,需要使用request.getParameter(String str)来获取得到的表单值,这样就会不可避免地引入Java代码。为了解决这个问题,<jsp:useBean>中的一个属性param起到了关键性的作用。利用param属性,可以把bean的性质值设置为一个请求参数的值,只需要指定请求参数。例如:
<jsp:useBean id="person" type="Person" class="Employee"> <%-- 这里代表name属性的值等于表单中useName填入的值 --%> <jsp:setProperty name="person" property="name" param="userName" /> </jsp:useBean>
为了更加简洁明了,如果不指定value或者param,就是默认要从匹配的请求参数中得到相应的bean属性值。另外,如果想让所有的请求参数名都和bean的性质名相匹配,可以将property的参数值设置为”*”,如下面所示:
<jsp:useBean id="person" type="Person" class="Employee"> <%-- 这里代表name属性的值等于表单中useName填入的值 --%> <jsp:setProperty name="person" property="*" /> </jsp:useBean>
另外,针对String和基本类型,Bean标记会自动完成类型强制转换,但是如果使用脚本的话,就不会转换。
接下来,如果一个bean的属性不是基本类型或者String该怎么办呢?又或者我们想要得到bean的属性的属性(例如person有一个属性dog,dog有一个属性name)。这样就需要EL表达式来拯救世界了——${person.dog.name}。
EL表达式
${left.right}
表达式的第一个命名变量可以是一个EL隐式对象,也可以是一个属性。除了pageContext的隐式对象都是映射,而pageContext是一个JavaBean。所以点号左边要么是一个Map(有键),要么是一个bean(有性质)。点号右边必须符合java标识符的命名规则。
使用[]操作符
只有当右边是左边变量的一个bean性质或者隐射键,才能使用点号。但如果左边是一个数组,List或者右边变量不遵循java命名规则时,就必须使用[]了。在[A]里面,如果没有引号,那么容器回去找A对应的属性。
EL隐式对象
EL会显示原始文本,包括HTML。但是HTML标签在浏览器中会作为HTML标记呈现,而不是纯文本显示。如果想要发出< ;以便用户可以在浏览器中看到<字符的话,则需要另外的技术了。
- pageScope, requestScope, sessionScope, applicationScope 作用域属性的Map(只是属性的一个map,而不是请求对象本身)
- param, paramValues 请求参数的Map
- head, headValues 请求首部的Map
- cookie
- initParam 上下文初始化参数
- pageContext 真正的引用
- 作用:
- 避免命名冲突
- 和[]操作符一起使用来应对不友好的属性命名,如将属性名设置为”foo.person”,那么使用${foo.person.name}是得不到name性质的值的,因为会在域里面找foo这个属性,要解决这个问题,需要使用域隐式对象和[]操作符,例如下面的例子:
${requestScope["foo.person"].name}
EL函数
当需要从一个Java方法获取数据时,利用EL表达式来调用一个普通类的静态方法是很容易做到这一点的。${prefix:name()}
要想实现一个EL函数,可以分为以下四步:
- 编写有一个公共静态方法的Java类
- 编写一个标记库描述文件(TLD)
- 在JSP中放一个taglib指令
- 使用EL调用函数
<?xml version="1.0" encoding="UTF-8"?> <taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" version="2.0"> <description>A testing tag library.</description> <tlib-version>1.0</tlib-version> <short-name>SimpleTagLibrary</short-name> <uri>DiceFunctions</uri> <function> <name>rollDice</name> <function-class>foo.DiceRoller</function-class> <function-signature> int rollDice() </function-signature> </function></taglib>
在TLD里面要为每一个参数指定完全限定类名(除非是一个基本类型)。例如,如果函数取一个Map参数,则应当是:
<function-signature> int rollDice(java.util.Map) </function-signature>
EL可以妥善地处理null值,即使找不到表达式中指定名的属性/性质/键,也会显示页面。算术表达式里面将null看做0,在逻辑表达式里面将null看做是false。
- jsp:bean与el表达式笔记
- jsp与EL表达式
- JSP与EL表达式
- JSP学习笔记(三):JSP配置与EL表达式
- JSP学习笔记---el表达式
- JSP 笔记(四 : EL 表达式 )
- 学习笔记之 jsp基础 与 El表达式
- JSP——EL表达式学习笔记
- JSP笔记——EL表达式
- JSP 笔记 —— EL 表达式语言
- (项目笔记)jsp中的el表达式
- jsp中的JSTL与EL表达式用法
- JSP中EL表达式入门与简介
- jsp中的JSTL与EL表达式用法
- jsp中的JSTL与EL表达式用法
- jsp中的JSTL与EL表达式用法
- jsp中的JSTL与EL表达式用法
- Web基础之JSP与EL表达式
- Codeforces 622D Optimal Number Permutation【贪心+构造】
- 第一天整理的笔记
- 在Mac OS X上安装 dnsmasq 来搭建DNS服务器
- 1019. 数字黑洞
- 使用maven构建 ssm项目 tomcat7插件运行报错, Invalid byte tag in constant pool: 60
- jsp:bean与el表达式笔记
- 计算机图形学(八)几何图形变换讲解与源代码
- echarts图表显示问题
- Android面试题-与性能优化相关面试题三
- 计数 i++,++i 简单的线程安全与线程非安全的代码对比
- mac登陆时出现一个 其他
- 高性能MySQL(五)—创建高性能索引(2)
- U盘插入电脑提示格式化怎么办
- Java学习:Java 中的 static 使用之静态变量