文档章节

jsp页面使用el表达式获取静态常量值

L
 L龙志
发布于 2017/05/31 19:49
字数 485
阅读 135
收藏 0

主要使用的常量类:

package com.milo.base.common.constant;

public class Constants {

    private Constants() {}

    public static final Integer YES = 1;

    public static final Integer NO = 0;

    /**
     * 支付超时时间 2小时
     */
    public static final Long PAY_TIMEOUT = 2 * 60 * 60 * 1000L;

    /**
     * 支付最短失效时间间隔 5分钟
     */
    public static final Long MIN_PAY_TIME_INTERVAL = 5 * 60 *1000L;


    /**
     * 支付类型
     */
    public class PayType {
        /**
         * 支付宝
         */
        public static final String ALIPAY = "alipay";

        /**
         * 微信
         */
        public static final String WEIXIN = "weixin";
    }

}

反射获取常量值工具类:

package com.milo.base.common.constant;

import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;

public class ConstantUtil {

    private static final Logger log = Logger.getLogger(ConstantUtil.class);

    private ConstantUtil() {}

    /**
     * 获取常量值
     * @param key
     * @return
     */
    public static Object get(String key) {
        log.info(String.format("获取常量值【key:%s】", key));

        if (StringUtils.isBlank(key)) {
            throw new IllegalArgumentException("获取常量的key不能为空");
        }

        String classPath = null;
        String fieldName = key;
        if (key.contains(".")) {
            classPath = StringUtils.substringBeforeLast(key, ".");
            fieldName = StringUtils.substringAfterLast(key, ".");
        }

        Class clazz = null;
        // 默认常量类
        if (StringUtils.isEmpty(classPath)) {
            clazz = Constants.class;
        } else {
            try {
                clazz = Class.forName(Constants.class.getName() + "$" + classPath.replace(".", "$"));
            } catch (ClassNotFoundException e) {
                log.info(String.format("【%s】不是直接在Constants内部类取的常量", key));
            }
        }

        // 带包名类,根文件夹下常量类暂不考虑
        while (null == clazz && StringUtils.contains(classPath, '.')) {
            try {
                clazz = Class.forName(classPath);
            } catch (ClassNotFoundException e) {
                String className = StringUtils.substringBeforeLast(classPath, ".");
                String innerClass = StringUtils.substringAfterLast(classPath, ".");
                classPath = className + "$" + innerClass;
            }
        }

        if (null == clazz) {
            throw new IllegalArgumentException("找不到常量类");
        }

        try {
            return clazz.getField(fieldName).get(null);
        } catch (NoSuchFieldException e) {
            throw new IllegalArgumentException("常量名不存在");
        } catch (Exception e) {
            throw new IllegalArgumentException("找不到对应常量");
        }
    }

    public static void main(String[] args) {
        System.out.println(get("PayType.WEIXIN"));
    }
}

tld文件constant.tld:

<?xml version="1.0" encoding="UTF-8"?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"       
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   
    http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"       
    version="2.0">     
    <!-- 定义函数版本 -->  
    <tlib-version>1.0</tlib-version>  
    <!-- 定义函数名称 -->  
    <short-name>constant</short-name>
    <uri>/constant-tags</uri>
    <!-- 定义第一个函数 -->  
    <function>  
        <!-- 定义第一个函数:reverse -->  
        <name>get</name>
        <!-- 定义函数处理类 -->  
        <function-class>com.milo.base.common.constant.ConstantUtil</function-class>
        <!-- 定义函数的对应方法 -->  
        <function-signature>  
            java.lang.Object get(java.lang.String)
        </function-signature>
    </function>
</taglib>

 

使用:

jsp页面引入

<%@ taglib prefix="constant" uri="/constant-tags" %>

获取值

${constant:get("PayType.WEIXIN")}

${constant:get("YES")}

${constant:get("com.milo.base.common.constant.Constants.PayType.WEIXIN")}

<c:if test='${constant:get("PayType.WEIXIN") == item.payType}'>
    ...
</c:if>

 

© 著作权归作者所有

上一篇: 将博客搬至CSDN
下一篇: 将博客搬至CSDN
L
粉丝 0
博文 2
码字总数 497
作品 0
广州
私信 提问
EL表达式和JSTL标签

EL表达式: EL表达式用于获取数据,在JSP页面中可使用${标识符}的形式,通知JSP引擎调用pageContext.findAttribute()方法,以标识符为关键字从各个域对象中获取对象。如果域对象中不存在标识...

晨曦之光
2012/05/16
174
0
(JavaEE-09)JSP中的MVC与三层架构

JSP开发模式 SUN公司推出JSP技术后,同时也推荐了两种web应用程序的开发模式,一种是JSP+JavaBean模式,一种是Servlet+JSP+JavaBean模式 JSP+JavaBean模式适合开发业务逻辑不太复杂的web应用...

_-Leon-_
2014/07/11
0
2
javaweb开发之EL和JSTL

一、EL 1.概述 EL 全名为Expression Language。 EL表达式可用在所有的HTML和JSP标签中作用是代替JSP页面中复杂的JAVA代码。 EL主要作用如下: (1)获取数据: EL表达式主要用于替换JSP页面中的...

小米米儿小
2013/12/05
0
0
JSP——Java Server Pages

简介 1. Jsp技术:Jsp是一种 html代码+ Java代码 + Jsp页面代码的技术,而且其不用像Servlet哪样需要配置访问路径。 2. Jsp执行原理:第一次访问服务器web项目中的jsp页面时,会首先把jsp页面...

江左煤郎
2018/09/13
0
0
JavaWeb12-HTML篇笔记(二)

Ø 为什么学习JSTL: JSTL和EL结合 替换页面中<%%> Ø JSTL版本: JSTL1.0 :不支持EL表达式. JSTL1.1 和 1.2 :支持EL表达式. Ø JSTL的标签库:包含了五类标签. core(核心标签),fmt(国际化标签)...

我是小谷粒
2018/05/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

java版电子商务spring cloud分布式微服务b2b2c社交电商(九)springboot整合Redis

引入依赖: 电子商务社交平台源码请加企鹅求求:一零三八七七四六二六。在pom文件中添加redis依赖: <dependency> <groupId>org.springframework.boot</groupId> ......

sccspuercode
4分钟前
0
0
Atomic包总结

synchronized已经能满足我们日常的线程安全需求了, synchronized是基于代码阻塞的机制, 也就是当某个线程占用资源时,其他线程是无法进入的, 如果这个线程出现问题的时候, 出现大量线程阻...

Java搬砖工程师
16分钟前
0
0
java JVM

1.JVM :方法区 堆 栈 运行常量池 程序计数器PC 栈: stack 方法信息 每个方法在执行的同时都会创建一个栈帧,用于存储局部变量表、操作数栈、动态链接、方法出口等信息 遇到方法【压栈】,执...

哎那个新来的
23分钟前
1
0
怎么升级phpstudy中的php版本

http://www.php.cn/jishu/php/413274.html php官网 下载php版本 https://windows.php.net/

15834278076
34分钟前
2
0
文件已删除但句柄没有释放导致磁盘空间用完

有时候会发现linux文件系统分区已经快满了,但又找不到到底是什么文件占用了磁盘空间,就有可能是已删除的文件的句柄没有释放,还占着空间 检查命令: lsof | grep deleted 如果发现很多del...

果树啊
39分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部