博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
el 表达式 强制类型转换
阅读量:5307 次
发布时间:2019-06-14

本文共 997 字,大约阅读时间需要 3 分钟。

今天有人问我了这个问题

jsp页面中,能否实现

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

a=${(a)+1}

 

 

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

发现确实是这个样子。

 

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

 

相关帖子:

 

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

Java代码  
  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,对基本型都是包装为对等的对象的。 
这样频繁的装箱拆箱,性能就打很大折扣了。

转载于:https://www.cnblogs.com/hfultrastrong/p/7349583.html

你可能感兴趣的文章
三.野指针和free
查看>>
activemq5.14+zookeeper3.4.9实现高可用
查看>>
TCP/IP详解学习笔记(3)IP协议ARP协议和RARP协议
查看>>
简单【用户输入验证】
查看>>
python tkinter GUI绘制,以及点击更新显示图片
查看>>
CS0103: The name ‘Scripts’ does not exist in the current context解决方法
查看>>
20130330java基础学习笔记-语句_for循环嵌套练习2
查看>>
Spring面试题
查看>>
窥视SP2010--第一章节--SP2010开发者路线图
查看>>
C语言栈的实现
查看>>
代码为什么需要重构
查看>>
TC SRM 593 DIV1 250
查看>>
SRM 628 DIV2
查看>>
2018-2019-2 20165314『网络对抗技术』Exp5:MSF基础应用
查看>>
Python-S9-Day127-Scrapy爬虫框架2
查看>>
SecureCRT的使用方法和技巧(详细使用教程)
查看>>
右侧导航栏(动态添加数据到list)
查看>>
81、iOS本地推送与远程推送详解
查看>>
虚拟DOM
查看>>
自建数据源(RSO2)、及数据源增强
查看>>