当前位置:编程学习 > JS >>

bean动作和EL表达式语言基础

与bean相关的标准动作:

<jsp:useBean id="person" class="foo.Person" scope="request" />
<jsp:getProperty name="person" property="name" />
<jsp:setProperty name="person" property="name" value="Fred" />
jsp:useBean动作在没有person属性时会自动创建一个person属性,并赋为null

jsp:useBean体:www.zzzyk.com

<jsp:useBean id="person" class="foo.Person" scope="request">
    <jsp:setProperty name="person" property="name" value="Fred" />
</jsp:useBean>

jsp:setProperty在jsp:useBean体中时,只有person属性不存在时才为新创建的属性设置属性,并不改变现存的属性值

建立多态的bean引用:

<jsp:useBean id="person" type="foo.Person" class="foo.Empolyee" scope="request" />
如果使用了type,但没有class,bean必须已经存在
如果使用了class(有或没有type),class不能使抽象类,而且必须有一个无参数的公共构造函数

利用param属性,可以将属性的性质设置为一个请求参数的值,例如:
<jsp:useBean id="person" class="foo.Person" scope="request">
    <jsp:setProperty name="person" property="name" param="userName" />
</jsp:useBean>

 
如果请求参数名与bean中的性质名相同,可以不用指出param属性,例如:
<jsp:useBean id="person" class="foo.Person" scope="request">
    <jsp:setProperty name="person" property="name" />
</jsp:useBean>


如果所有请求参数名都与bean性质匹配,还可以如下这么干:
<jsp:useBean id="person" class="foo.Person" scope="request">
    <jsp:setProperty name="person" property="*" />
</jsp:useBean>

 
bean标记会自动转换基本类型和String类型的性质

如果使用脚本,就不会完成自动转换,即是表达式在<jsp:setProperty>标记中也会失败

利用<jsp:getProperty>只能访问bean的性质,不能访问嵌套性质

--------------------------------------------------------------------

EL表达式:形如 ${person.name}

表达式中第一个变量名可以使一个隐式对象或属性

EL隐式对象包括:pageScope,requestScope,sessionScope,applicationScope,param,paramValues,header,headerValues,cookie,initParam,pageContext

属性包括:任意作用域中的属性,包括page,request,session,application

EL隐式对象除了pageContext都是映射对象,pageContext是对pageContext对象的实际引用

用点号"."访问性质和映射值,如${person.name},点号右边变量必须符合java变量名命名规范,该变量是一个映射键或者性质

用[]号访问性质或映射键,除了点号能访问的之外,[]还能访问数组和List中的内容,并且数组和List中的String索引会强制转换为int,例如:

${favoriteFood[0]}和${favoriteFood["0"]都可访问

使用[]时,如果[]里没有引号,容器会计算括号中的内容,搜说与该名字绑定的属性,并替换为这个属性的值

中括号中可以使用嵌套表达式,例如:${musicMap[MusicType[0]]}

param隐式对象:得到对应参数名的参数,例如${param.food}

paramValues隐式对象:得到对应参数名的多个参数,例如${paramValues.food[0]},${paramValues.food[1]}

得到host首部:${header["host"]}或者${header.host}

得到http请求方法:不是${requestScope.method}而是${pageContext.request.method}

requestScope只是请求作用域属性的一个Map,而不是请求对象本身

作用域隐式对象可以解决命名冲突的问题,还可以解决属性名中有点号的问题,例如:一个属性叫做foo.person,${foo.person.name}就找不到你想找的性质,因为容器吧foo当做属性名,用隐式对象解决,${requestScope["foo.person"].name},ok。

得到cookie值,例如:${cookie.userName.value}

得到上下文初始化参数,例如:${initParam.mainEmail},注意,initParam表示上下文初始化参数,不是servlet初始化参数

补充:Web开发 , Jsp ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,