文档章节

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

L
 L龙志
发布于 2017/05/31 19:49
字数 522
阅读 51
收藏 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>

 

© 著作权归作者所有

共有 人打赏支持
L
粉丝 0
博文 2
码字总数 534
作品 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 学习总结---学习笔记

什么是JSP 1)为什么说,Servlet是一个动态Web开发技术呢? Servlet是基于服务端的一种动态交互技术, HttpServletRequest表示客户端到服务端的对象 HttpServletResponse表示服务端到客户端的...

知止内明
04/18
0
0
JavaWeb12-HTML篇笔记(二)

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

我是小谷粒
05/28
0
0
Tomcat无法解析el表达式解决方案

方法一 对于一个单个JSP页面,你可以使用定义page指令来设置jsp页面是否支持EL。默认是支 持EL(如果要页面不支持EL,请设置为isELIgnored=true; <%@ page isELIgnored="true|false"%> 方法二...

火龙战士
2015/03/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

kernel version does not match DSO version

错误信息: kernel version 384.11 does not match DSO version 384.130.0 原因是: cuda driver版本太低,不匹配DSO 简单有效的修复方法,升级nvidia driver, 步骤如下: 1. google seach ...

刘小米
今天
0
0
maven坐标和依赖

一、maven坐标详解 <groupId>com.fgt.club</groupId><artifactId>club-common-service-facade</artifactId><version>3.0.0</version><packaging>jar</packaging> maven的坐标元素说......

老韭菜
今天
1
0
springmvc-servlet.xml配置表功能解释

问:<?xml version="1.0" encoding="UTF-8" ?> 答: xml version="1.0"表示是此xml文件的版本是1.0 encoding="UTF-8"表示此文件的编码方式是UTF-8 问:<!DOCTYPE beans PUBLIC "-//SPRING//......

隐士族隐逸
今天
1
0
基于TP5的微信的公众号获取登录用户信息

之前讲过微信的公众号自动登录的菜单配置,这次记录一下在TP5项目中获取自动登录的用户信息并存到数据库的操作 基本的流程为:微信设置自动登录的菜单—>访问的URL指定的函数里获取用户信息—...

月夜中徘徊
今天
0
0
youTrack

package jetbrains.teamsys.license.runtime; 计算lis package jetbrains.ring.license.reader; 验证lis 安装后先不要生成lis,要把相关文件进行替换 ring-license-checker-1.0.41.jar char......

max佩恩
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部