首页 > 其他分享 >EL表达式 (详解) .

EL表达式 (详解) .

时间:2023-07-10 12:33:18浏览次数:40  
标签:username EL 详解 user logininfo true 表达式


EL表达式



     1、EL简介



1)语法结构



       ${expression}



2)[]与.运算符



     EL 提供.和[]两种运算符来存取数据。



     当要存取的属性名称中包含一些特殊字符,如.或?等并非字母或数字的符号,就一定要使用 []。



例如:



         ${user.My-Name}应当改为${user["My-Name"] }


     如果要动态取值时,就可以用[]来做,而.无法做到动态取值。例如:


         ${sessionScope.user[data]}中data 是一个变量


3)变量


     EL存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为


username的变量。


     因为我们并没有指定哪一个范围的username,所以它会依序从Page、Request、Session、


Application范围查找。


     假如途中找到username,就直接回传,不再继续找下去,但是假如全部的范围都没有找到时,


就回传null。


     属性范围在EL中的名称


         Page         PageScope


         Request         RequestScope


         Session         SessionScope


         Application     ApplicationScope


4) 1--EL表达式用${}表示,可用在所有的HTML和JSP标签中作用是代替JSP页面中复杂的JAVA代码.


2--EL表达式可操作常量 变量 和隐式对象. 最常用的 隐式对象有${param}和${paramValues}. 


${param}表示返回请求参数中单个字符串的值. ${paramValues}表示返回请求参数的一组


值.pageScope表示页面范围的变量.requestScope表示请求对象的变量. sessionScope表示会话


范围内的变量.applicationScope表示应用范围的变量.


3 --<%@ page isELIgnored="true"%> 表示是否禁用EL语言,TRUE表示禁止.FALSE表示不禁


止.JSP2.0中默认的启用EL语言.


             4-- EL语言可显示 逻辑表达式如${true and false}结果是false     关系表达式如${5>6} 结


果是false     算术表达式如 ${5+5} 结果是10


             5--EL中的变量搜索范围是:page request session application   点运算符(.)和"[ ]"都是


表示获取变量的值.区别是[ ]可以显示非词类的变量




2、EL隐含对象


1)与范围有关的隐含对象


与范围有关的EL 隐含对象包含以下四个:pageScope、requestScope、sessionScope 和


applicationScope;


它们基本上就和JSP的pageContext、request、session和application一样;


在EL中,这四个隐含对象只能用来取得范围属性值,即getAttribute(String name),却不能取得


其他相关信息。


例如:我们要取得session中储存一个属性username的值,可以利用下列方法:


     session.getAttribute("username") 取得username的值,


在EL中则使用下列方法


     ${sessionScope.username}


2)与输入有关的隐含对象


与输入有关的隐含对象有两个:param和paramValues,它们是EL中比较特别的隐含对象。


例如我们要取得用户的请求参数时,可以利用下列方法:


     request.getParameter(String name)


     request.getParameterValues(String name)


在EL中则可以使用param和paramValues两者来取得数据。


     ${param.name}


     ${paramValues.name}




3.其他隐含对象


1)cookie


JSTL并没有提供设定cookie的动作,


例:要取得cookie中有一个设定名称为userCountry的值,可以使用${cookie.userCountry}     来


取得它。


2)header和headerValues


header 储存用户浏览器和服务端用来沟通的数据


例:要取得用户浏览器的版本,可以使用${header["User-Agent"]}。


另外在鲜少机会下,有可能同一标头名称拥有不同的值,此时必须改为使用headerValues 来取得


这些值。


3)initParam


initParam取得设定web站点的环境参数(Context)


例:一般的方法String userid = (String)application.getInitParameter("userid");


     可以使用 ${initParam.userid}来取得名称为userid


4)pageContext


pageContext取得其他有关用户要求或页面的详细信息。


     ${pageContext.request.queryString}         取得请求的参数字符串


     ${pageContext.request.requestURL}         取得请求的URL,但不包括请求之参数字符串


     ${pageContext.request.contextPath}         服务的web application 的名称


     ${pageContext.request.method}           取得HTTP 的方法(GET、POST)


     ${pageContext.request.protocol}         取得使用的协议(HTTP/1.1、HTTP/1.0)


     ${pageContext.request.remoteUser}         取得用户名称


     ${pageContext.request.remoteAddr }         取得用户的IP 地址


     ${pageContext.session.new}             判断session 是否为新的


     ${pageContext.session.id}               取得session 的ID


     ${pageContext.servletContext.serverInfo}   取得主机端的服务信息


   4) 条件标签>


1.算术运算符有五个:+、-、*或$、/或div、%或mod


2.关系运算符有六个:==或eq、!=或ne、<或lt、>或gt、<=或le、>=或ge


3.逻辑运算符有三个:&&或and、||或or、!或not


4.其它运算符有三个:Empty运算符、条件运算符、()运算符


     例:${empty param.name}、${A?B:C}、${A*(B+C)}


5) EL函数(functions)


语法:ns:function( arg1, arg2, arg3 …. argN)


其中ns为前置名称(prefix),它必须和taglib 指令的前置名称一置


       6) 补充:


<%@ taglib prefix="c" http://java.sun.com/jstl/core_rt"> http://java.sun.com/jstl/core_rt " %> 
 
FOREACH:
 
 
  
<c:forEach items="${messages}" 
 
var="item" 
 
begin="0" 
 
end="9" 
 
step="1" 
 
varStatus="var"> 
 
…… 
 
</c:forEach>


OUT:


<c:out value="/${logininfo.username}"/>


c:out>将value 中的内容输出到当前位置,这里也就是把logininfo 对象的


username属性值输出到页面当前位置。


${……}是JSP2.0 中的Expression Language(EL)的语法。它定义了一个表达式,


其中的表达式可以是一个常量(如上),也可以是一个具体的表达语句(如forEach循环体中


的情况)。典型案例如下:


? ${logininfo.username}


这表明引用logininfo 对象的username 属性。我们可以通过“.”操作符引


用对象的属性,也可以用“[]”引用对象属性,如${logininfo[username]}


与${logininfo.username}达到了同样的效果。


“[]”引用方式的意义在于,如果属性名中出现了特殊字符,如“.”或者“-”,


此时就必须使用“[]”获取属性值以避免语法上的冲突(系统开发时应尽量避免


这一现象的出现)。


与之等同的JSP Script大致如下:

LoginInfo logininfo = 
 
(LoginInfo)session.getAttribute(“logininfo”); 
 
String username = logininfo.getUsername();


可以看到,EL大大节省了编码量。


这里引出的另外一个问题就是,EL 将从哪里找到logininfo 对象,对于


${logininfo.username}这样的表达式而言,首先会从当前页面中寻找之前是


否定义了变量logininfo,如果没有找到则依次到Request、Session、


Application 范围内寻找,直到找到为止。如果直到最后依然没有找到匹配的


变量,则返回null.


如果我们需要指定变量的寻找范围,可以在EL表达式中指定搜寻范围:


${pageScope.logininfo.username} 
 
${requestScope.logininfo.username} 
 
${sessionScope.logininfo.username} 
 
${applicationScope.logininfo.username}



在Spring 中,所有逻辑处理单元返回的结果数据,都将作为Attribute 被放


置到HttpServletRequest 对象中返回(具体实现可参见Spring 源码中


org.springframework.web.servlet.view.InternalResourceView.


exposeModelAsRequestAttributes方法的实现代码),也就是说Spring


MVC 中,结果数据对象默认都是requestScope。因此,在Spring MVC 中,


以下寻址方法应慎用:


${sessionScope.logininfo.username} 
 
${applicationScope.logininfo.username}



? ${1+2}


结果为表达式计算结果,即整数值3。


? ${i>1}


如果变量值i>1的话,将返回bool类型true。与上例比较,可以发现EL会自


动根据表达式计算结果返回不同的数据类型。


表达式的写法与java代码中的表达式编写方式大致相同。


IF / CHOOSE: 
 
<c:if test="${var.index % 2 == 0}"> 
 
* 
 
</c:if>



判定条件一般为一个EL表达式。


<c:if>并没有提供else子句,使用的时候可能有些不便,此时我们可以通过<c:choose>


tag来达到类似的目的:

<c:choose> 
 
<c:when test="${var.index % 2 == 0}"> 
 
* 
 
</c:when> 
 
<c:otherwise> 
 
! 
 
</c:otherwise> 
 
</c:choose>


类似Java 中的switch 语句,<c:choose>提供了复杂判定条件下的简化处理手法。其


中<c:when>子句类似case子句,可以出现多次。上面的代码,在奇数行时输出“*”号,


而偶数行时输出“!”。


经验:1、如果EL表达式无法解析:– <%@ page isELIgnored="false" %>




一、           JSTL




1、EL运算符>;


       2)var指定变量,并把EL运算结果赋值给该变量值为true/false;


       3)scope:指定 var变量的范围;






6、迭代标签


语法:<c:forEach items=“collection” var=“name” varStatus=“status” begin=“int“ 


end=”int” step=“int” >


           //循环体


           </c:forEach>


     说明:1)items:是集合,用EL表达式;


       2)var:变量名,存放items


       3)varStatus: 显示循环状态的变量


①index:从0开始;


                     ②count:元素位置,从1开始;


                     ③first:如果是第一个元素则显示true;


                     ④last:如果是最后一个元素则显示true;


       4)begin:循环的初始值(整型);


       5)end: 循环结束 ;


       6)step:步长,循环间隔的数值;


7、<c:otherwise>标签


     例:


如果user.wealthy值true,则显示user.wealthy is true.


<c:choose> 
 
<c:when test=""> 
 
user.generous is true. 
 
</c:when> 
 
<c:when test=""> 
 
user.stingy is true. 
 
</c:when> 
 
<c:otherwise> 
 
user.generous and user.stingy are false. 
 
</c:otherwise> 
 
</c:choose>


说明:只有当条件user.generous返回值是true时,才显示user.generous is true.


只有当条件user.stingy返回值是true时,才显示user.stingy is true.


其它所有的情况(即user.generous和user.stingy的值都不为true)全部显示user.generous and 


user.stingy are false.


由于JSTL没有形如if (){…} else {…}的条件语句,所以这种形式的语句只能用<c:choose>、


<c:when>和<c:otherwise>标签共同来完成了。


8、c:forTokens>标签


说明:   


items 进行循环的项目 是 无


delims 分割符 是 无


begin 开始条件 否 0


end 结束条件 否 集合中的最后一个项目


step 步长 否 1


var 代表当前项目的变量名 否 无


varStatus 显示循环状态的变量 否 无


例子:


<c:forTokens items="a:b:c:d" delims=":" var="token"> 
 
<c:out value=""/> 
 
</c:forTokens>


关于 <c:forTokens> 的用法的例子

 

这个标签的使用相当于java.util.StringTokenizer类。在这里将字符串a:b:c:d以:分开循环四次,


token是循环到当前分割到的字符串。


9、<c:redirect>标签


     说明:标签将请求重新定向到另外一个页面,它有以下属性 属性 描 述 是否必须 缺省值


url url地址 是 无


context /后跟本地web应用程序的名字 否 当前应用程序


例子:


<c:redirect url="http://www.baidu.com" />


将请求重新定向到 <c:redirect url="http://www.baidu.com" /> 页,相当于response.setRedirect


(" http://www.baidu.com/ ");


10、<c:param>标签


     说明:<c:param>标签用来传递参数给一个重定向或包含页面,它有以下属性属 性 描 述 是否


必须 缺省值


name 在request参数中设置的变量名 是 无


value 在request参数中设置的变量值 否 无


例子:

<c:redirect url="login.jsp"> 
 
<c:param name="id" value="888"/> 
 
</c:redirect>


将参数888以id为名字传递到login.jsp页面,相当于login.jsp?id=888


11、<fmt:>格式化标签


     说明:需要导入   <%@ taglib prefix="fmt" http://java.sun.com/jsp/jstl/fmt"> http://java.sun.com/jsp/jstl/fmt " %>


     1)格式化日期<fmt:formatDate value=“” pattern=“yyyy-MM-dd HH:mm:ss”/>


               Value:通过EL表达式或<%new Date() %> 取的日期值;


               Pattern:输出的日期格式;                      

 

    2) 格式化数字<fmt:formatNumber 


value="${n}" pattern="###,###.##" />

标签:username,EL,详解,user,logininfo,true,表达式
From: https://blog.51cto.com/u_16179085/6675193

相关文章

  • ruoyi框架导入excel传入后端解析,后端返回excel导出
    前端:<el-upload      v-loading="importOpenLoading"      ref="renewUpload"      :show-file-list="false"      :limit="1"      :on-success="renewImportExcelSuccess" ......
  • 径向基RBF神经网络的电力负荷数据回归预测matlab 程序代码,数据EXCEL格式,直接运行。
    径向基RBF神经网络的电力负荷数据回归预测matlab程序代码,数据EXCEL格式,直接运行。可更换自己数据,上手简单。ID:7426632657061937......
  • 风电分布式并网模型 Wind Farm Simulation Model。 Matlab/simulink
    风电分布式并网模型WindFarmSimulationModel。Matlab/simulink1、共2个火电厂,4个风电场,共15个节点。火电厂:1号火电厂,设定为SwingBus;2号火电厂,设定为PVBus。(在汽轮机调节器可进行调节励磁系统的控制方式)风电厂:4个风电厂;各个风电厂的风速可......
  • 更改label标签的文本内容
    1.原始标签 2.变更的代码 3.效果 ......
  • 明明是张表格脸,怎么也长出了图片?(Excel批量处理图片合集)
    图片来源为函数类:Excel批量插入图片制图片的下拉选项图片就是图片类:批量插入图片把图片用在了数据透视表里只要是单元格对象的图片,不问出处:当函数遇上图片......
  • .NET写一个自己的Lambda表达式与表达式树
    LambdaExpression继承ExpressionExpression又继承LambdaExpressio所以,Expression与Expression的区别在于:泛型类以静态类型的方法标识了它是什么种类的表达式,也就是说,他确定了返回类型和参数。所以显然,TDelegate必须是一个委托类型。注意:并非所有的Lambda表达式都能转......
  • electron 和 react 进程通信
    现在有个需求,我想要使用react选择上传文件,获取文件路径在浏览器里面调用antdesign的upload组件是做不到的,只能获取文件名由于浏览器的安全限制,无法获取文件的完整路径。如果需要获取文件的完整路径,可以考虑使用Electron等桌面应用程序开发框架,或者使用ActiveX控件等......
  • Mac Parallels (PD) 常规设置
    Mac上安装了Parallels(PD)程序默认使用Parallels打开,比较烦人,取消设置:虚机中不显示mac的菜单栏,按Control+Option就会临时显示备份与恢复使用mac快捷健......
  • oracle 数据库备份shell脚本
    #!/bin/bash#设置Oracle环境变量exportORACLE_HOME=/path/to/oracle/homeexportORACLE_SID=your_oracle_sidexportPATH=$ORACLE_HOME/bin:$PATH#定义备份目录backup_dir="/path/to/backup/directory"#定义日志文件路径log_file="/path/to/log/file.log"#定义远程服务......
  • 做项目与做产品的区别详解
    1.对质量要求做项目的第一要求是在要求的时间内开发出满足客户需求的软件,它的第一准则是客户永远是对的,开发者必须按客户要求的做,但是因为客户提出的要求往往是发散的、弱逻辑的、非系统的,所以开发出的软件需要很多硬编码,再加上时间紧迫,不能对已经开发出来的模块进行必要的重构,项......