文档章节

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

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

在jsp页面中,为了避免硬编码,想办法写了一个jsp页面获取静态常量值的方法,写得不好各位大佬勿喷啊!有什么错误和不足还望帮忙指正和完善,谢谢!

主要使用的常量类:

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
码字总数 534
作品 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

没有更多内容

加载失败,请刷新页面

加载更多

centos7安装RabbitMQ详细过程

由于RabbitMQ是基于Erlang语言开发,所以在安装RabbitMQ之前,需要先安装Erlang 1、环境: centos 7.1 内核版本3.10.0-229.el7.x86_64 Erlang 19.0.4版本 RabbitMQ 3.6.14版本 2、在线安装E...

秋至丶枫以落
14分钟前
0
0
6个使用KeePassX保护密码的技巧

虽然安全是个深奥的主题,但是你可以遵循几个简单的日常习惯来减小攻击面。本文将解释确保密码信息安全的重要性,并给出如何充分利用KeePassX的建议。 日益互联的数字世界使安全成为一个重要...

Linux就该这么学
16分钟前
0
0
2018最佳GAN论文回顾(下)

继上一篇《2018最佳GAN论文回顾(上)》,我又继续介绍了一个对于GAN的基于样式的生成器体系结构的新论文,提出了一个新的模型来应对这种挑战。 一种用于生成式对抗网络的基于生成器体系结构...

阿里云官方博客
18分钟前
0
0
UnsatisfiedLinkError sawindbg.dll

方法:搜索sawindbg.dll,然后将文件报错的目录下

洛水
55分钟前
5
0
说说不知道的Golang中参数传递

本文由云+社区发表 导言 几乎每一个C++开发人员,都被面试过有关于函数参数是值传递还是引用传递的问题,其实不止于C++,任何一个语言中,我们都需要关心函数在参数传递时的行为。在golang中...

腾讯云加社区
55分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部