初学EL表达式

EL 全名为Expression Language

EL 语法很简单,它最大的特点就是使用上很方便。接下来介绍EL主要的语法结构:

${sessionScope.user.sex}

所有EL都是以${为起始、以}为结尾的。上述EL范例的意思是:从Session的范围中,取得

用户的性别。假若依照之前JSP Scriptlet的写法如下:

User user = (User)session.getAttribute("user");

String sex = user.getSex( );

User是一个对象,Sex是他的一个属性,所以,取对象的值:${范围.变量.属性}

两者相比较之下,可以发现EL 的语法比传统JSP Scriptlet 更为方便、简洁。

其中,pageScoperequestScopesessionScopeapplicationScope都是EL 的隐含对象,由它们的名称可以很容易猜出它们所代表的意思,

例如:${sessionScope.username}是取出Session范围的username 变量。这种写法是不是比之前JSP 的写法:

String username = (String) session.getAttribute("username");容易、简洁许多.

 

 

自动转变类型

 

EL 除了提供方便存取变量的语法之外,它另外一个方便的功能就是:自动转变类型,我们来看下面这个范例:

 

${param.count + 20}

 

假若窗体传来count的值为10时,那么上面的结果为30。之前没接触过JSP 的读者可能会认为上面的例子是理所当然的,但是在JSP 1.2 之中不能这样做,原因是从窗体所传来的值,它们的类型一律是String,所以当你接收之后,必须再将它转为其他类型,如:intfloat 等等,然后才能执行一些数学运算,下面是之前的做法:

 

String str_count = request.getParameter("count");

 

int count = Integer.parseInt(str_count);//这里需要把字符型转为整形

count = count + 20;
所以,注意不要和java的语法(当字符串和数字用“+”链接时会把数字转换为字符串)搞混淆喽

 

 

在 EL中则可以使用param和paramValues两者来取得数据。
${param.name}
${paramValues.name}

 

这里param 的功能和request.getParameter(String name)相同,而paramValues和
request.getParameterValues(String name)相同,这里取到的是字符类型的数组,针对复选框情况(一个相同的名字对应多个值)。如果用户填了一个表格,表格名称为username,则我们就可以使用${param.username}来取得用户填入的值。

pageScope 例如:${pageScope.user.userName} 相当于<%=page.getAttribute("user").getUserName%>
requestScope 例如:${requestScope.books} 相当于<%=request.getAttribute("books")%>
sessionScope 例如:${sessionScope.lastURL} 相当于<%=session.getAttribute("lastURL")%>
applicationScope 例如:${applicationScope.provice} 相当于<%=application.getAttribute("provice")%>

看到这里,大家应该很明确EL表达式只能通过内置对象取值,也就是只读操作,如果想进行写操作的话就让后台代码去完成,毕竟EL表达式仅仅是视图上的输出标签罢了。

pageContext

我们可以使用 ${pageContext}来取得其他有关用户要求或页面的详细信息。下表列出了几个比较常用的部分

 

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

 

${pageContext.request.requestURL}  ------ 取得请求的URL,但不包括请求之参数字符串,即servlet的HTTP地址。

 

${pageContext.request.contextPath}  -------服务的webapplication的名称

 

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

 

 

 

 

 

注意:

       之前经常看到有人说js是客房端的,EL是服务端的,不能在js中使用EL表达式----真是扯淡

       要在javascript中使用El表达式,只需在el表达式两端加上单引号或者双引号即可

       如:

       <script>
            function(){
            alert('${sessionScope.user.name}');  //获取session中user对象的name属性
         }
         </script>
也就是说只要使用$就要加单引号

 

 

原文地址:https://www.cnblogs.com/kailing-con/p/4242400.html