今天有人问我了这个问题
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.代码如下:
- <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,对基本型都是包装为对等的对象的。
这样频繁的装箱拆箱,性能就打很大折扣了。
分享到:
相关推荐
8. **类型转换**:如`${(String)bean.property}`,强制类型转换。 **JSTL(JavaServer Pages Standard Tag Library)**: JSTL是Java服务器端的一套标准标签库,它提供了多种功能标签,包括核心标签、XML处理标签、...
总结,EL表达式是Java EE应用中的强大工具,它简化了数据访问和处理,提供了取值、方法调用等多种功能,并且支持类型转换和复合表达式,使得代码更加简洁和高效。理解和熟练运用EL表达式,能显著提高开发效率,提升...
而对于左值,预期类型会被忽略,值会在设置属性前被强制转换为目标属性类型。 ##### 3.1.2 作为方法表达式的计算表达式 有时候,`eval-expression`不是用来引用模型对象,而是用来引用方法。例如,在JSF中,组件...
总之,这个Bug揭示了在使用EL表达式时,特别是在涉及到类型转换的条件判断中,需要注意不同容器可能存在的差异。通过理解EL表达式的工作原理和适当使用JSTL函数,我们可以有效地规避此类问题,确保应用的稳定性和...
由于某种复制类型相当常用.所以有一些特殊的字符专门用于表示它们.例如: +号匹配的就是复制前一模式一次 或多次的模式.下面的表列出了复制语法.先看一个例子: /\d{2, 4}/ //匹配2到4间的数字. /\w{3} \d?/ //...
对于JSF 1.2版本,可以使用Application对象的evaluateValueExpressionGet()方法直接评估EL表达式,并强制转换为指定类型。 值得注意的是,第3种方法在JSF 1.1中并不适用,因为它不包含evaluateValueExpressionGet...
**描述:** 使用EL表达式从JavaBean获取值时,如果表达式写法错误,会导致值无法正确显示。 **解决办法:** - 确保使用了正确的EL标签,例如`<c:forEach>`。 - 检查JavaBean的属性名是否正确,并且已经正确地设置了...
- **类型转换**: OGNL 提供了强大的类型转换机制,使得从一种类型到另一种类型的转换变得容易。 - **数据源映射**: 可以用于将表格的列映射到 Swing 的 TableModel 数据源。 - **Web应用绑定**: 在 Web 应用中,...
16. **getAttribute()返回值**:`request.getAttribute()`返回的是一个Object类型,因此获取时需要进行强制类型转换,如`(String)request.getAttribute("name")`。 以上就是JavaWeb测试题中涉及的一些关键知识点,...
- **EL表达式**:允许开发者访问JavaBean属性,以及执行简单的运算。 - 在EL中,可以使用 `${bean.property}` 或 `${bean['property']}` 形式来访问JavaBean的属性。 **知识点总结**: - EL表达式提供了一种简便的...
- **类型转换**:OGNL内置了强大的类型转换机制,便于不同数据类型之间的转换,例如将字符串转换为数值类型。 - **表列映射**:OGNL可以用来将表格的列映射到Swing的TableModel的数据源语言。 - **Web组件绑定**:...
- **继承与多态**:介绍类的继承、方法的覆盖和重载,多态引用和多态参数的使用,以及instanceof运算符和对象的强制类型转换。 - **高级特性**:涵盖如equals、hashcode和toString方法,可变参数,static和final...
表达式的前缀(int*)就是传统C风格的强制类型转换说明(typecast),又可称为强制转换说明(cast)。强制转换说明告诉编译器把表达式转换成指定的类型。有些情况下强制转换是禁用的,例如不能把一个结构类型转换成其他...
- **泛型**:泛型增加了代码的类型安全,减少了强制类型转换,并允许编译器进行更严格的类型检查。 - **代理**:Java的代理机制可以动态创建一个实现了一组给定接口的新类,用于实现如AOP(面向切面编程)等高级...
- **Struts2**虽然不再强制要求使用ActionForm模式,但仍然支持类似的功能,例如通过ModelDriven模式或使用Struts2的类型转换机制来处理用户输入。 #### 视图技术的支持 - **Struts1**支持使用JSTL标签库和EL表达式...
通过OGNL的类型转换机制,可以轻松实现不同数据类型(如字符串到数值类型)之间的转换。 - **数据源语言**:用于表格列与Swing TableModel之间的映射,简化了数据展示与处理的复杂度。 - **Web组件与底层模型对象...