EL表达式中字符判断

需求背景

今天在做前台数据展示处理时,使用到了el表达式来判断,正常使用eq或==,无效,代码如下

		 <div>
                    <c:if test="${myparam.isUse eq '1'}">
                        <input type="radio" name="isUse" class="required myinput"  value="1"  checked />
                        <p>启用</p>
                        <input type="radio"  name="isUse"   class="required myinput"  value="0"  />
                        <p>禁用</p>
                    </c:if>
                    <c:if test="${myparam.isUse eq '0'}">
                        <input type="radio" name="isUse" class="required myinput"  value="1"   />
                        <p>启用</p>
                        <input type="radio"  name="isUse"   class="required myinput"  value="0"  checked/>
                        <p>禁用</p>
                    </c:if>
          </div>

目的就是根据后台的值,来默认进行回显(此处代码,可优化,后面会附上);这里的isUse是明确为1且为字符,但是没有执行代码。

问题解决

前后台都检查了一遍,并没有语法问题,与正常使用el表达式的唯一区别就是,我这里的变量是一个字符,而非字符串,

/**
     * 群组状态是否启用:0表示禁用,1表示启用
     * @return
     */
    private char isUse;
    public char getIsUse() {
        return isUse;
    }
    public void setIsUse(char isUse) {
        this.isUse = isUse;
    }

也查了相关资料,找到以下解决方法。

方法一

在后台传值时,将字符转化为字符串。前台不变,显示正常

param.put("isUse", tbBizType.getIsUse()+"");//直接加上空字符串即可
方法二

在前台进行处理,使用charAt(0)方法获取字符,进行比较,代码如下,

				<div>
                        <input type="radio" name="isUse" class="required myinput"  value="1"
                            ${myparam.isUse=='1'.charAt(0)?'checked':''}>
                        <p>启用</p>
                        <input type="radio"  name="isUse"   class="required myinput"  value="0"
                            ${myparam.isUse=='0'.charAt(0)?'checked':''}>
                        <p>禁用</p>
                  <div>
方式三

将字符转化为整数,因为这里我使用的字符值只是0或者1,所以在前端可以只是使用0或者1的编码值进行比较
0的编码对应的是49,1的编码对应的是50,代码如下:

 			<div>
                        <input type="radio" name="isUse" class="required myinput"  value="1"
                            ${myparam.isUse==49?'checked':''}>
                        <p>启用</p>
                        <input type="radio"  name="isUse"   class="required myinput"  value="0"
                            ${myparam.isUse==48?'checked':''}>
                        <p>禁用</p>
                <div>
方式四

使用枚举,将可能的值定义为一个枚举,并使用它声明变量,在进行el表达式操作的时候,可以直接调用进行比较

//定义枚举
		public enum OrderStatus {
		     N, X, Y, Z;
		}
//使用枚举类型声明
		private OrderStatus isUse; //get和set方法


				<div>
                        <input type="radio" name="isUse" class="required myinput"  value="1"
                            ${myparam.isUse=='1'?'checked':''}>
                        <p>启用</p>
                        <input type="radio"  name="isUse"   class="required myinput"  value="0"
                            ${myparam.isUse=='0'?'checked':''}>
                        <p>禁用</p>
                  <div>

反思
  • 在查资料的时候,明显发现这方面反馈的问题比较少,所以很少会出现这种在el表达式中比较字符是否相等的情况
  • 怎样才能避免这种情况的发生,在定义变量的时候尽量不使用char类型进行定义(为啥在java中不要使用char类型),使用枚举、字符串、布尔一样可以达到效果。
  • 今天也算是踩坑了,之前的数据类型也是自己定义的,其实在做业务处理的时候,就发现了字符的不方便性,需要进行不同的转换,而在使用el表达式时,理所当然的就掉进坑内里面了。但是也还是有收获的,也算一个扫了一个知识盲点了。
  • 越来越发现stackoverflow是个好东西了。

参考:
https://stackoverflow.com/questions/14454261/how-to-compare-a-char-property-in-el
https://stackoverflow.com/questions/10542875/char-comparison-in-el-expression
https://blog.csdn.net/happylee6688/article/details/33306069

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值