天天看点

自定义 jstl 标签 fns

1、jsp 头部页面引入函数

jsp页面需要引入自定义fns函数声明:

<%@ taglib prefix=”fns” uri=”/WEB-INF/tlds/fns.tld” %>,自定义的tld文件位于/WEB-INF/tlds/fns.tld

一般需要C标签配合使用,同时引入C标签声明:

<%@ taglib prefix=”c” uri=”http://java.sun.com/jsp/jstl/core” %>

2、fns.tld 代码,仿照jstl的fn函数fn.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">

    <description>JSTL 1.1 functions library</description>
    <display-name>JSTL functions sys</display-name>
    <tlib-version>1.1</tlib-version>
    <short-name>fns</short-name>
    <uri>http://java.sun.com/jsp/jstl/functionss</uri>


    <function>
        <description>获取开发公司名称</description>
        <name>getCompanyName</name>
        <function-class>com.jeeplus.common.config.Global</function-class>
        <function-signature>java.lang.String getCompanyName()</function-signature>
        <example>${fns:getCompanyName()}</example>
    </function>

    <function>
        <description>获取项目名称</description>
        <name>getProjectName</name>
        <function-class>com.jeeplus.common.config.Global</function-class>
        <function-signature>java.lang.String getProjectName()</function-signature>
        <example>${fns:getProjectName()}</example>
    </function>

    <function>
        <description>获取基本设置信息</description>
        <name>getSysBase</name>
        <function-class>com.jeeplus.common.config.Global</function-class>
        <function-signature>com.jeeplus.modules.sys.entity.SysBase getSysBase()</function-signature>
        <example>${fns:getSysBase()}</example>
    </function>


    <function>
        <description>获取管理路径</description>
        <name>getAdminPath</name>
        <function-class>com.jeeplus.common.config.Global</function-class>
        <function-signature>java.lang.String getAdminPath()</function-signature>
        <example>${fns:getAdminPath()}</example>
    </function>
    <function>
        <description>获取网站路径</description>
        <name>getFrontPath</name>
        <function-class>com.jeeplus.common.config.Global</function-class>
        <function-signature>java.lang.String getFrontPath()</function-signature>
        <example>${fns:getFrontPath()}</example>
    </function>
    <function>
        <description>获取网站URL后缀</description>
        <name>getUrlSuffix</name>
        <function-class>com.jeeplus.common.config.Global</function-class>
        <function-signature>java.lang.String getUrlSuffix()</function-signature>
        <example>${fns:getUrlSuffix()}</example>
    </function>
    <function>
        <description>获取配置</description>
        <name>getConfig</name>
        <function-class>com.jeeplus.common.config.Global</function-class>
        <function-signature>java.lang.String getConfig(java.lang.String)</function-signature>
        <example>${fns:getConfig(key)}</example>
    </function>
    <function>
        <description>获取常量</description>
        <name>getConst</name>
        <function-class>com.jeeplus.common.config.Global</function-class>
        <function-signature>java.lang.Object getConst(java.lang.String)</function-signature>
        <example>${fns:getConst(key)}</example>
    </function>


    <!-- UserUtils -->
    <function>
        <description>数字转换为中文字符串</description>
        <name>convertToChart</name>
        <function-class>com.jeeplus.common.utils.StringUtils</function-class>
        <function-signature>java.lang.String convertToChart(int)</function-signature>
        <example>${fns:convertToChart(digit)}</example>
    </function>
    <function>
        <description>获取当前用户对象</description>
        <name>getUser</name>
        <function-class>com.jeeplus.modules.sys.utils.UserUtils</function-class>
        <function-signature>com.jeeplus.modules.sys.entity.User getUser()</function-signature>
        <example>${fns:getUser()}</example>
    </function>

    <function>
        <description>根据编码获取用户对象</description>
        <name>getUserById</name>
        <function-class>com.jeeplus.modules.sys.utils.UserUtils</function-class>
        <function-signature>com.jeeplus.modules.sys.entity.User get(java.lang.String)</function-signature>
        <example>${fns:getUserById(id)}</example>
    </function>

    <function>
        <description>获取授权用户信息</description>
        <name>getPrincipal</name>
        <function-class>com.jeeplus.modules.sys.utils.UserUtils</function-class>
        <function-signature>com.jeeplus.modules.sys.security.SystemAuthorizingRealm.Principal getPrincipal()</function-signature>
        <example>${fns:getPrincipal()}</example>
    </function>

    <function>
        <description>获取当前用户的菜单对象列表</description>
        <name>getMenuList</name>
        <function-class>com.jeeplus.modules.sys.utils.UserUtils</function-class>
        <function-signature>java.util.List getMenuList()</function-signature>
        <example>${fns:getMenuList()}</example>
    </function>

    <function>
        <description>获取当前用户的菜单对象列表</description>
        <name>getTopMenu</name>
        <function-class>com.jeeplus.modules.sys.utils.UserUtils</function-class>
        <function-signature>com.jeeplus.modules.sys.entity.Menu getTopMenu()</function-signature>
        <example>${fns:getTopMenu()}</example>
    </function>
    <function>
        <description>获取当前时间与指定时间的差值</description>
        <name>getTime</name>
        <function-class>com.jeeplus.modules.sys.utils.UserUtils</function-class>
        <function-signature>java.util.Date getTime(java.lang.String)</function-signature>
        <example>${fns:getTime(java.lang.String)}</example>
    </function>
    <function>
        <description>获取当前用户的区域对象列表</description>
        <name>getAreaList</name>
        <function-class>com.jeeplus.modules.sys.utils.UserUtils</function-class>
        <function-signature>java.util.List getAreaList()</function-signature>
        <example>${fns:getAreaList()}</example>
    </function>

    <function>
        <description>获取当前用户的部门对象列表</description>
        <name>getOfficeList</name>
        <function-class>com.jeeplus.modules.sys.utils.UserUtils</function-class>
        <function-signature>java.util.List getOfficeList()</function-signature>
        <example>${fns:getOfficeList()}</example>
    </function>

    <function>
        <description>获取当前用户缓存</description>
        <name>getCache</name>
        <function-class>com.jeeplus.modules.sys.utils.UserUtils</function-class>
        <function-signature>java.lang.Object getCache(java.lang.String, java.lang.Object)</function-signature>
        <example>${fns:getCache(cacheName, defaultValue)}</example>
    </function>

    <!-- DictUtils -->
    <function>
        <description>获取字典标签</description>
        <name>getDictLabel</name>
        <function-class>com.jeeplus.modules.sys.utils.DictUtils</function-class>
        <function-signature>java.lang.String getDictLabel(java.lang.String, java.lang.String, java.lang.String)</function-signature>
        <example>${fns:getDictLabel(value, type, defaultValue)}</example>
    </function>

    <function>
        <description>获取字典标签(多个)</description>
        <name>getDictLabels</name>
        <function-class>com.jeeplus.modules.sys.utils.DictUtils</function-class>
        <function-signature>java.lang.String getDictLabels(java.lang.String, java.lang.String, java.lang.String)</function-signature>
        <example>${fns:getDictLabels(values, type, defaultValue)}</example>
    </function>

    <function>
        <description>获取字典值</description>
        <name>getDictValue</name>
        <function-class>com.jeeplus.modules.sys.utils.DictUtils</function-class>
        <function-signature>java.lang.String getDictValue(java.lang.String, java.lang.String, java.lang.String)</function-signature>
        <example>${fns:getDictValue(label, type, defaultValue)}</example>
    </function>

    <!--获取字典对象列表 start-->
    <function>
        <description>获取字典对象列表</description>
        <!--EL页面调用名字-->
        <name>getDictList</name>
        <!--指定标签的处理类,指定了标签由哪个Java类来处理。-->
        <function-class>com.jeeplus.modules.sys.utils.DictUtils</function-class>
        <!--指定EL页面调用名字中实际调用的方法.指定处理类的实际方法.参数和回调函数要写完整路径-->
        <function-signature>java.util.List getDictList(java.lang.String)</function-signature>
        <!--举例说明-->
        <example>${fns:getDictList(type)}</example>
    </function>
    <!--获取字典对象列表 end-->

    <function>
        <description>获取字典对象列表</description>
        <!--EL页面调用名字-->
        <name>getDictListForQuestion</name>
        <!--指定标签的处理类,指定了标签由哪个Java类来处理。-->
        <function-class>com.jeeplus.modules.sys.utils.DictUtils</function-class>
        <!--指定EL页面调用名字中实际调用的方法.指定处理类的实际方法.参数和回调函数要写完整路径-->
        <function-signature>java.util.List getDictListForQuestion(java.lang.String)</function-signature>
        <!--举例说明-->
        <example>${fns:getDictListForQuestion(type)}</example>
    </function>

    <!--获取字典对象列表 start-->
    <function>
        <description>获取字典对象列表</description>
        <!--EL页面调用名字-->
        <name>getDictList2</name>
        <!--指定标签的处理类,指定了标签由哪个Java类来处理。-->
        <function-class>com.jeeplus.modules.sys.utils.DictUtils</function-class>
        <!--指定EL页面调用名字中实际调用的方法.指定处理类的实际方法.参数和回调函数要写完整路径-->
        <function-signature>java.util.List getDictList2(java.lang.String,java.lang.String)</function-signature>
        <!--举例说明-->
        <example>${fns:getDictList2(type,keyValue)}</example>
    </function>
    <!--获取字典对象列表 end-->

    <function>
        <description>获取系统常量对象列表</description>
        <!--EL页面调用名字-->
        <name>getConsList</name>
        <!--指定标签的处理类,指定了标签由哪个Java类来处理。-->
        <function-class>com.jeeplus.modules.sys.utils.DictUtils</function-class>
        <!--指定EL页面调用名字中实际调用的方法.指定处理类的实际方法.参数和回调函数要写完整路径-->
        <function-signature>java.util.List getConsList(java.lang.String)</function-signature>
        <!--举例说明-->
        <example>${fns:getConsList(type)}</example>
    </function>

    <function>
        <description>获取系统常量对象列表-增加所有**选项</description>
        <!--EL页面调用名字-->
        <name>getConsList2</name>
        <!--指定标签的处理类,指定了标签由哪个Java类来处理。-->
        <function-class>com.jeeplus.modules.sys.utils.DictUtils</function-class>
        <!--指定EL页面调用名字中实际调用的方法.指定处理类的实际方法.参数和回调函数要写完整路径-->
        <function-signature>java.util.List getConsList2(java.lang.String,java.lang.String)</function-signature>
        <!--举例说明-->
        <example>${fns:getConsList2(type,keyValue)}</example>
    </function>

    <function>
        <description>获取字典对象列表</description>
        <name>getDictListJson</name>
        <function-class>com.jeeplus.modules.sys.utils.DictUtils</function-class>
        <function-signature>java.lang.String getDictListJson(java.lang.String)</function-signature>
        <example>${fns:getDictListJson(type)}</example>
    </function>

    <function>
        <description>获取对象的属性值</description>
        <name>getValue</name>
        <function-class>com.jeeplus.modules.sys.utils.DictUtils</function-class>
        <function-signature>java.lang.String getValue(java.lang.Object, java.lang.String)</function-signature>
        <example>${fns:getValue(obj, name)}</example>
    </function>

    <function>
        <description>获取两级对象的属性值</description>
        <name>getObjectValue</name>
        <function-class>com.jeeplus.modules.sys.utils.DictUtils</function-class>
        <function-signature>java.lang.String getObjectValue(java.lang.Object, java.lang.String)</function-signature>
        <example>${fns:getObjectValue(obj, name)}</example>
    </function>

    <!-- Encodes -->
    <function>
        <description>URL编码</description>
        <name>urlEncode</name>
        <function-class>com.jeeplus.common.utils.Encodes</function-class>
        <function-signature>java.lang.String urlEncode(java.lang.String)</function-signature>
        <example>${fns:urlEncode(part)}</example>
    </function>
    <function>
        <description>URL解码</description>
        <name>urlDecode</name>
        <function-class>com.jeeplus.common.utils.Encodes</function-class>
        <function-signature>java.lang.String urlDecode(java.lang.String)</function-signature>
        <example>${fns:urlDecode(part)}</example>
    </function>
    <function>
        <description>HTML编码</description>
        <name>escapeHtml</name>
        <function-class>com.jeeplus.common.utils.Encodes</function-class>
        <function-signature>java.lang.String escapeHtml(java.lang.String)</function-signature>
        <example>${fns:escapeHtml(html)}</example>
    </function>
    <function>
        <description>HTML解码</description>
        <name>unescapeHtml</name>
        <function-class>com.jeeplus.common.utils.Encodes</function-class>
        <function-signature>java.lang.String unescapeHtml(java.lang.String)</function-signature>
        <example>${fns:unescapeHtml(html)}</example>
    </function>

    <!-- StringUtils -->
    <function>
        <description>从后边开始截取字符串</description>
        <name>substringAfterLast</name>
        <function-class>org.apache.commons.lang3.StringUtils</function-class>
        <function-signature>java.lang.String substringAfterLast(java.lang.String, java.lang.String)</function-signature>
        <example>${fns:substringAfterLast(str,separator)}</example>
    </function>
    <function>
        <description>判断字符串是否以某某开头</description>
        <name>startsWith</name>
        <function-class>org.apache.commons.lang3.StringUtils</function-class>
        <function-signature>boolean startsWith(java.lang.CharSequence, java.lang.CharSequence)</function-signature>
        <example>${fns:startsWith(str,prefix)}</example>
    </function>
    <function>
        <description>判断字符串是否以某某结尾</description>
        <name>endsWith</name>
        <function-class>org.apache.commons.lang3.StringUtils</function-class>
        <function-signature>boolean endsWith(java.lang.CharSequence, java.lang.CharSequence)</function-signature>
        <example>${fns:endsWith(str,suffix)}</example>
    </function>
    <function>
        <description>缩写字符串,超过最大宽度用“...”表示</description>
        <name>abbr</name>
        <function-class>com.jeeplus.common.utils.StringUtils</function-class>
        <function-signature>java.lang.String abbr(java.lang.String, int)</function-signature>
        <example>${fns:abbr(str,length)}</example>
    </function>
    <function>
        <description>替换掉HTML标签</description>
        <name>replaceHtml</name>
        <function-class>com.jeeplus.common.utils.StringUtils</function-class>
        <function-signature>java.lang.String replaceHtml(java.lang.String)</function-signature>
        <example>${fns:replaceHtml(html)}</example>
    </function>
    <function>
        <description>转换为JS获取对象值,生成三目运算返回结果。</description>
        <name>jsGetVal</name>
        <function-class>com.jeeplus.common.utils.StringUtils</function-class>
        <function-signature>java.lang.String jsGetVal(java.lang.String)</function-signature>
        <example>${fns:jsGetVal('row.user.id')}  返回:!row?'':!row.user?'':!row.user.id?'':row.user.id</example>
    </function>

    <!-- DateUtils -->
    <function>
        <description>获取当前日期</description>
        <name>getDate</name>
        <function-class>com.jeeplus.common.utils.DateUtils</function-class>
        <function-signature>java.lang.String getDate(java.lang.String)</function-signature>
        <example>${fns:getDate(pattern)}</example>
    </function>
    <function>
        <description>获取过去的天数</description>
        <name>pastDays</name>
        <function-class>com.jeeplus.common.utils.DateUtils</function-class>
        <function-signature>long pastDays(java.util.Date)</function-signature>
        <example>${fns:pastDays(date)}</example>
    </function>
    <function>
        <description>将日期对象Date转为标准格式字符串yyyy-mm-dd hh:mm:ss显示</description>
        <name>formatDateTime</name>
        <function-class>com.jeeplus.common.utils.DateUtils</function-class>
        <function-signature>java.lang.String formatDateTime(java.util.Date)</function-signature>
        <example>${fns:formatDateTime(date)}</example>
    </function>
    <function>
        <description>将日期对象Date转为几小时前,几天前显示</description>
        <name>formatDateDiff</name>
        <function-class>com.jeeplus.common.utils.DateUtils</function-class>
        <function-signature>java.lang.String formatDateDiff(java.util.Date)</function-signature>
        <example>${fns:formatDateDiff(date)}</example>
    </function>
    <!-- JsonMapper -->
    <function>
        <description>对象转换JSON字符串</description>
        <name>toJson</name>
        <function-class>com.jeeplus.common.mapper.JsonMapper</function-class>
        <function-signature>java.lang.String toJsonString(java.lang.Object)</function-signature>
        <example>${fns:toJson(object)}</example>
    </function>

    <function>
        <description>根据编码获取用户对象</description>
        <name>getByLoginName</name>
        <function-class>com.jeeplus.modules.sys.utils.UserUtils</function-class>
        <function-signature>com.jeeplus.modules.sys.entity.User getByLoginName(java.lang.String)</function-signature>
        <example>${fns:getByLoginName(loginName)}</example>
    </function>

    <function>
        <description>根据当前用户id获取用户头像</description>
        <name>getUserPhoto</name>
        <function-class>com.jeeplus.modules.sys.utils.UserUtils</function-class>
        <function-signature>com.jeeplus.modules.sys.entity.User getUserPhoto(java.lang.String)</function-signature>
        <example>${fns:getUserPhoto(userId)}</example>
    </function>


    <!-- 绑定学年 -->
    <function>
        <description>绑定学年</description>
        <name>getSchoolYearList</name>
        <function-class>com.jeeplus.modules.sys.utils.DictUtils</function-class>
        <function-signature>com.jeeplus.modules.sys.utils.DictUtils getSchoolYearList()</function-signature>
        <example>${fns:getSchoolYearList()}</example>  
    </function>

    <function>
        <description>获取项目盘符地址</description>
        <name>getPubEnclosureDirPath</name>
        <function-class>com.jeeplus.common.config.Global</function-class>
        <function-signature>java.lang.String getPubEnclosureDirPath()</function-signature>
        <example>${fns:getPubEnclosureDirPath()}</example>
    </function>

</taglib>

           

3、 为表达式函数(标签函数)提供后台服务类:common.config.Global

/**
 * Copyright &copy; 2015-2020 <a href="http://www.runyu.com/" target="_blank" rel="external nofollow" >RunYu</a> All rights reserved.
 */
package com.jeeplus.common.config;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.Reader;
import java.io.UnsupportedEncodingException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

import org.apache.ibatis.io.Resources;
import org.springframework.core.io.DefaultResourceLoader;

import com.ckfinder.connector.ServletContextFactory;
import com.google.common.collect.Maps;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.jeeplus.common.utils.CacheUtils;
import com.jeeplus.common.utils.PropertiesLoader;
import com.jeeplus.common.utils.StringUtils;
import com.jeeplus.modules.sys.entity.SysBase;

/**
 * 全局配置类
 * 
 * @author runyu
 * @version 2014-06-25
 */
public class Global {

    /**
     * 当前对象实例
     */
    private static Global global = new Global();

    /**
     * 保存全局属性值
     */
    private static Map<String, String> map = Maps.newHashMap();

    /**
     * 属性文件加载对象
     */
    private static PropertiesLoader loader = new PropertiesLoader("runyu.properties");

    /**
     * 显示/隐藏
     */
    public static final String SHOW = "1";
    public static final String HIDE = "0";

    /**
     * 是/否
     */
    public static final String YES = "1";
    public static final String NO = "0";

    /**
     * 对/错
     */
    public static final String TRUE = "true";
    public static final String FALSE = "false";

    /**
     * 上传文件基础虚拟路径
     */
    public static final String USERFILES_BASE_URL = "/userFiles/";

    /**
     * 上传文件基础虚拟路径
     */
    public static final String USERFILES_URL = "/admin/logo/";

    /**
     * 上传图片基础虚拟路径
     */
    public static final String IMAGE_BASE_URL = "/logo/";

    /**
     * 获取当前对象实例
     */
    public static Global getInstance() {
        return global;
    }

    public static boolean doAuthorization = false;
    public static final String AUTHORIZATIONCACHE = "AuthorizationCache";
    public static final String AUTHORIZATIONCACHEKEY = "Authorization";

    /**
     * 获取配置
     * 
     * @see ${fns:getConfig('adminPath')}
     */
    @SuppressWarnings("unchecked")
    public static String getConfig(String key) {
        // 验证拦截器是否已经被调用。如果没有被调用,抛出错误
//      System.out.println("--------------------------------------------doAuthorization:" + doAuthorization
//              + "--------------------------------------------");
//      if (doAuthorization) {
//          HashMap<String, Boolean> mapAuthorization = (HashMap<String, Boolean>) CacheUtils.get(AUTHORIZATIONCACHE,
//                  AUTHORIZATIONCACHEKEY);
//          String sdate = "";
//          Date ddate = new Date();
//          sdate = (new SimpleDateFormat("yyyyMMdd")).format(ddate);
//          System.out.println("--------------------------------------------sdate:" + sdate
//                  + "--------------------------------------------");
//          if (mapAuthorization == null) {
//              System.out.println("--------------------------------------------mapAuthorization == null:" + true
//                      + "--------------------------------------------");
//
//          } else {
//              System.out.println("--------------------------------------------mapAuthorization == null:" + false
//                      + "--------------------------------------------");
//
//          }
//          // mapAuthorization=null;
//          if (mapAuthorization == null) {
//
//              // 缓存为空时,重新调用api接口重置缓存
//              doAuthorization = false;
//              HttpUtils.RemoteAuthorizationCheck();
//              mapAuthorization = (HashMap<String, Boolean>) CacheUtils.get(AUTHORIZATIONCACHE, AUTHORIZATIONCACHEKEY);
//              doAuthorization = true;
//          }
//          System.out.println("--------------------------------------------mapAuthorization:" + mapAuthorization
//                  + "--------------------------------------------");
//
//          if (mapAuthorization.get(sdate) == null) {
//              // 缓存为空时,重新调用api接口重置缓存
//              doAuthorization = false;
//              HttpUtils.RemoteAuthorizationCheck();
//              mapAuthorization = (HashMap<String, Boolean>) CacheUtils.get(AUTHORIZATIONCACHE, AUTHORIZATIONCACHEKEY);
//              doAuthorization = true;
//              mapAuthorization = (HashMap<String, Boolean>) CacheUtils.get(AUTHORIZATIONCACHE, AUTHORIZATIONCACHEKEY);
//              System.out.println("--------------------------------------------mapAuthorization22222:"
//                      + mapAuthorization + "--------------------------------------------");
//
//              // 重置后如果仍为空,抛出错误
//              if (mapAuthorization.get(sdate) == null) {
//                  throw new NullPointerException();
//              }
//              System.out.println("--------------------------------------------result:" + mapAuthorization.get(sdate)
//                      + "--------------------------------------------");
//
//          } else {
//              System.out.println("--------------------------------------------result2:" + mapAuthorization.get(sdate)
//                      + "--------------------------------------------");
//
//              if (mapAuthorization.get(sdate) == false) {
//                  throw new NullPointerException();
//              }
//          }
//      }

        String value = map.get(key);
        if (value == null) {
            value = loader.getProperty(key);
            map.put(key, value != null ? value : StringUtils.EMPTY);
        }
        return value;
    }

    /**
     * 获取管理端根路径
     */
    public static String getAdminPath() {
        return getConfig("adminPath");
    }

    /**
     * 获取前端根路径
     */
    public static String getFrontPath() {
        return getConfig("frontPath");
    }

    /**
     * 获取URL后缀
     */
    public static String getUrlSuffix() {
        return getConfig("urlSuffix");
    }

    /**
     * 是否是演示模式,演示模式下不能修改用户、角色、密码、菜单、授权
     */
    public static Boolean isDemoMode() {
        String dm = getConfig("demoMode");
        return "true".equals(dm) || "1".equals(dm);
    }

    /**
     * 上传服务器IP
     */
    public static String uploadUrl() {
        String uploadUrl = getConfig("UPLOADURL");
        return uploadUrl;
    }

    /**
     * 在修改系统用户和角色时是否同步到Activiti
     */
    public static Boolean isSynActivitiIndetity() {
        String dm = getConfig("activiti.isSynActivitiIndetity");
        return "true".equals(dm) || "1".equals(dm);
    }

    /**
     * 页面获取常量
     * 
     * @see ${fns:getConst('YES')}
     */
    public static Object getConst(String field) {
        try {
            return Global.class.getField(field).get(null);
        } catch (Exception e) {
            // 异常代表无配置,这里什么也不做
        }
        return null;
    }

    /**
     * 获取上传文件的根目录
     * 
     * @return
     */
    public static String getUserfilesBaseDir() {
        String dir = getConfig("userfiles.basedir");
        if (StringUtils.isBlank(dir)) {
            try {
                dir = ServletContextFactory.getServletContext().getRealPath("/");
            } catch (Exception e) {
                return "";
            }
        }
        if (!dir.endsWith("/")) {
            dir += "/";
        }
        // System.out.println("userfiles.basedir: " + dir);
        return dir;
    }

    /**
     * 获取工程路径
     * 
     * @return
     */
    public static String getProjectPath() {
        // 如果配置了工程路径,则直接返回,否则自动获取。
        String projectPath = Global.getConfig("projectPath");
        if (StringUtils.isNotBlank(projectPath)) {
            return projectPath;
        }
        try {
            File file = new DefaultResourceLoader().getResource("").getFile();
            if (file != null) {
                while (true) {
                    File f = new File(file.getPath() + File.separator + "src" + File.separator + "main");
                    if (f == null || f.exists()) {
                        break;
                    }
                    if (file.getParentFile() != null) {
                        file = file.getParentFile();
                    } else {
                        break;
                    }
                }
                projectPath = file.toString();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return projectPath;
    }

    /**
     * 获取根目录路径
     * 
     * @return
     */
    public static String getDirPath() {
        String projectPath = getProjectPath();
        Properties prop = System.getProperties();
        String os = prop.getProperty("os.name");
        if (os.startsWith("win") || os.startsWith("Win"))
            projectPath = projectPath.split(":")[0].toString() + ":\\userFiles\\";
        else
            projectPath = "/home/userFiles/";
        return projectPath;
    }

    /**
     * 获取项目盘符地址
     * 
     * @return
     */
    public static String getPubEnclosureDirPath() {
        String projectPath = HttpUtils.getPubEnclosureDirPath();
        return projectPath;
    }

    /**
     * 获取项目名称
     * 
     * 
     */
    public static String getProjectName() {
        String ProjectName = "";
        Gson gson = new Gson();
        String param = "";
        String json = "";

        try {
            json = HttpUtils.doPost("sys/dictInterface/findBaseConfig", param);
        } catch (Exception e) {
            e.printStackTrace();
        }
        SysBase result = null;
        try {
            result = gson.fromJson(json, new TypeToken<SysBase>() {
            }.getType());

        } catch (Exception e) {
            // TODO: handle exception
        }
        ProjectName = result.getProjectname().trim();
        return ProjectName;
    }

    /**
     * 获取开发公司名称
     * 
     * 
     */
    public static String getCompanyName() {
        String CompanyName = "";
        Gson gson = new Gson();
        String param = "";
        String json = "";

        try {
            json = HttpUtils.doPost("sys/dictInterface/findBaseConfig", param);
        } catch (Exception e) {
            e.printStackTrace();
        }
        SysBase result = null;
        try {
            result = gson.fromJson(json, new TypeToken<SysBase>() {
            }.getType());

        } catch (Exception e) {
            // TODO: handle exception
        }
        CompanyName = result.getCompanyname().trim();
        return CompanyName;
    }

    /**
     * 获取是否可以从网盘选择文件
     * 
     * 
     */
    public static SysBase getSysBase() {

        Gson gson = new Gson();
        String param = "";
        String json = "";

        try {
            json = HttpUtils.doPost("sys/dictInterface/findBaseConfig", param);
        } catch (Exception e) {
            e.printStackTrace();
        }
        SysBase result = null;
        try {
            result = gson.fromJson(json, new TypeToken<SysBase>() {
            }.getType());

        } catch (Exception e) {
            // TODO: handle exception
        }

        return result;
    }

    /**
     * 写入properties信息
     *
     * @param key
     *            名称
     * @param value
     *            值
     */
    public static void modifyConfig(String key, String value) {
        try {
            // 从输入流中读取属性列表(键和元素对)
            Properties prop = getProperties();
            prop.setProperty(key, value);
            String path = Global.class.getResource("/runyu.properties").getPath();
            FileOutputStream outputFile = new FileOutputStream(path);
            prop.store(outputFile, "modify");
            outputFile.close();
            outputFile.flush();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 返回 Properties
     * 
     * @param fileName
     *            文件名 (注意:加载的是src下的文件,如果在某个包下.请把包名加上)
     * @param
     * @return
     */
    public static Properties getProperties() {
        Properties prop = new Properties();
        try {
            Reader reader = Resources.getResourceAsReader("/runyu.properties");
            prop.load(reader);
        } catch (Exception e) {
            return null;
        }
        return prop;
    }

}

           

4、在jsp页面或js中使用自定义的表达式函数fns:

自定义 jstl 标签 fns
自定义 jstl 标签 fns