天天看點

自定義 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