el 表达式 强制类型转换

今天有人问我了这个问题

jsp页面中,能否实现

<%  request.setAttrites("a","1234");  %>

a=${(a)+1}

我隐约记得是jsp会默认将a转化为integer类型然后相加的,但是记不太清楚了,于是专门写了这个jsp页面,进行了下验证。

发现确实是这个样子。

然后上网搜索了下,发现el表达式确实是将内容进行相应的值转换后然后返回相应的类型的。

相关帖子:

http://www.iteye.com/topic/177373

前段时间在工作中遇到了一个问题,在jsp页面通过JSTL判断对象是否等于'1',这个对象是char类型的,可是不管怎么操作,这个逻辑判断都是false,就算这个对象是字符'1',同样都是返回false.代码如下:

  1. <c:if test="${contract.c_attri_id=='1'}">经销</c:if>

当时无法处理这个问题,于是一气之下将contract.c_attri_id对象的类型更改为String类型,该判断通过.当contract.c_attri_id为"1"时,那么以上代码将成功返回true,显示"经销". 
后来询问我过去的老师,最终知道了这个问题产生的真正原因: 
是这样的,EL和Java类型并不是一一对应的。 
这是所有解释语言的特点,数据类型都少,便于自动转型和提高开发效率,比如JavaScript。 
在你的这个情况下,contract.c_attri_id被转型为Long,想想java基础知识,char也可以表示整型数,对吧? 
比如你的char型的'1',就被转型成了long型的49,你可以打印${contract.c_attri_id}看看。 
等号右边的'1',被认为是字符串,而不是char类型,EL自动做转型,依据是等号左边的类型。 
结果就是比较49==1。 
怎么解决呢? 
我觉得你的解决方式是对的,就是转成String类型。 
java做业务开发的一个经验,针对JavaBean,就是尽量用对象类型,比如Long,String,Boolean。 
减少不必要的麻烦。 
性能上基本型是好,不过随着java5时代到来,你调用的API,比如Hibernate,对基本型都是包装为对等的对象的。 
这样频繁的装箱拆箱,性能就打很大折扣了。

el 表达式 强制类型转换的更多相关文章

  1. el 表达式 和 ognl表达式

    el (expression language) el 基础操作符 el 能够隐含对象(就是可以直接访问的) el 的两种使用方式,第二种好像在jsp中没有什么用,主要用于jsf el能够访问的对象( ...

  2. EL表达式具体解释

    在 JSP 页面中,使用标签库取代传统的 Java 片段语言来实现页面的显示逻辑已经不是新技术了,然而.由自己定义标签非常easy造成反复定义和非标准的实现.鉴于此.出现了 JSTL ( JSP St ...

  3. javaweb开发之EL表达式

    一.EL简介 EL全名为Expression Language,它主要用于替换JSP页面中的脚本表达式<%= %>,从各种类型的Web域中检索Java对象.获取数据.它可以很方便地访问Ja ...

  4. JavaWeb(七):EL表达式、自定义标签和JSTL

    一.EL表达式 语法 el.jsp <%@page import="java.util.Date"%> <%@page import="com.atgu ...

  5. Servlet/JSP-08 EL表达式

    EL - Expression Language 一. 基本语法 EL表达式以 ${} 的形式访问变量的值 1. "." 和 "[]" 运算符 <%@ p ...

  6. C++强制类型转换操作符 const_cast

    const_cast也是一个强制类型转换操作符.<C++ Primer>中是这样描述它的: 1.将转换掉表达式的const性质. 2.只有使用const_cast才能将const性质性质转 ...

  7. C++强制类型转换操作符 static_cast

    static_cast是一个强制类型转换操作符.强制类型转换,也称为显式转换,C++中强制类型转换操作符有static_cast.dynamic_cast.const_cast.reinterpert ...

  8. EL表达式和JSTL

    EL相关概念JSTL一般要配合EL表达式一起使用,来实现在jsp中不出现java代码段.所以我们先来学习EL表达式 EL主要用于查找作用域中的数据,然后对它们执行简单操作:它不是编程语言,甚至不是脚本 ...

  9. EL表达式与JSTL

    内容包括 EL表达式 EL函数库 JSTL 核心标签库 格式化标签库 SQL标签库 XML标签库 自定义标签库 EL表达式 EL是Expression Language的是缩写,是JSP页面编写的一种 ...

随机推荐

  1. PowerDesigner 表模型图展示列信息

    今天突然发现表模型不展示列信息了,只显示一个名称,如下图:     虽让点击表模型能看到,但我想让他本身就显示,pd默认就是会显示的,今天不知怎么了,网上找这方面的设置很难找,所以我记录下设置方法(我 ...

  2. 于C#控制台传递参数和接收参数

    前言: 写了这么久程序,今天才知道的一个基础知识点,就是程序入口 static void Main(string[] args) 里的args参数是什么意思 ?惭愧... 需求: 点击一个button ...

  3. AR_销售订单收款基本操作(流程)

    2014-06-04 Created By BaoXinjian

  4. Android特性与系统架构

    Android特性与系统架构 一.Android特性 • 应用程序框架支持组件的重用与替换 • Dalvik 虚拟机专为移动设备优化 • 集成的浏览器基于开源的WebKit 引擎 • 优化的图形库包括 ...

  5. codeforces#254DIV2解题报告

    今天简直大爆发啊... 吃了顿烧烤竟然这么管事. . . .. 本弱渣竟然做出来了3道,并且B题是我第一次在CF中用到算法..(曾经最多也就是贪心. . . ). 题目地址:codeforces#22 ...

  6. C#实现WinForm下DataGridView控件的拷贝和粘贴

    DataGridView控件应该是数据库应用系统最常用的控件之一,其方便性不言而喻的.往往用户在使用过程中会提出"从DataGridView空间 中拷贝数据或是向某个DataGridView ...

  7. spring 读取配置文件

    spring读取dubbo xml文件,在本项目内可以调用正常,一旦把改项目打成jar包,供其他项目调用,就会提示找不到配置文件 ClassPathXmlApplicationContext cont ...

  8. 分享九:php易混淆的语法

    一:php后期静态绑定 从php5.3开始,php增加了一个叫后期绑定的功能,用于在继承范围内引用静态调用的类 该功能从语言内部角度考虑北命名为“后期静态绑定”:“后期绑定”意思说:static::不 ...

  9. 【Android】16.3 带Intent过滤器的Services

    分类:C#.Android.VS2015: 创建日期:2016-03-01 一.简介 这一节演示带Intent过滤器的Services的基本用法. 1.配置Intent Filter 不论是本地解决方 ...

  10. Mogondb笔记

    创建数据库 use dbname 创建数据表(集合) db.createCollection("tablename") 给表添加记录 db.tablename.insert({na ...