View Javadoc
1   /**
2    * Copyright By Grandsoft Company Limited.  
3    * 2014年3月15日 下午5:13:13
4    */
5   package gboat2.base.plugin.struts.velocity;
6   
7   import gboat2.base.bridge.GboatAppContext;
8   import gboat2.base.bridge.util.json.JsonUtil;
9   
10  import java.util.HashMap;
11  import java.util.Map;
12  
13  import org.apache.commons.lang3.StringUtils;
14  import org.apache.commons.lang3.time.DateFormatUtils;
15  import org.apache.commons.lang3.time.DateUtils;
16  import org.apache.velocity.VelocityContext;
17  
18  /**
19   * Gboat2 平台扩展的 Velocity 上下文,继承自 {@link VelocityContext},以方便在 vm 页面调用工具类的静态方法。<br>
20   * 使用方法:<br>
21   * <ol>
22   * <li>在 struts.xml 中添加常量定义:<code>
23   * &lt;constant name="struts.velocity.contexts" value="gboat2.base.plugin.struts.velocity.GboatVelocityContext" /&gt;
24   * </code></li>
25   * <li>在 vm 页面中可以使用 $StringUtils.trim(" text ") 删除传入字符串的前后空格,使用该类作为 Velocity
26   * 的上下文后, 在 vm 页面中可以使用的变量如下(左侧为 vm 页面中的变量值,右侧为该变量值对应的 Java 工具类):
27   * <ul>
28   * <li>$GboatAppContext - {@link gboat2.base.bridge.GboatAppContext}</li>
29   * <li>$ObjectMapper - {@link com.fasterxml.jackson.databind.ObjectMapper}</li>
30   * <li>$JsonUtil - {@link gboat2.base.bridge.util.json.JsonUtil}</li>
31   * <li>$StringUtils - {@link org.apache.commons.lang3.StringUtils}</li>
32   * <li>$DateUtils - {@link org.apache.commons.lang3.time.DateUtils}</li>
33   * <li>$DateFormatUtils - {@link org.apache.commons.lang3.time.DateFormatUtils}</li>
34   * </ul>
35   * </li>
36   * </ol>
37   * 
38   * @author <a href="mailto:[email protected]">何明旺</a>
39   * @since 3.0
40   * @date 2014年3月15日
41   */
42  public class GboatVelocityContext extends VelocityContext {
43  
44      public static final Map<String, Object> MAP = new HashMap<String, Object>();
45      
46      static{
47          MAP.put("GboatAppContext", new GboatAppContext());
48          MAP.put("ObjectMapper", JsonUtil.generateMapper());
49          MAP.put("JsonUtil", new JsonUtil());
50          MAP.put("StringUtils", new StringUtils());
51          MAP.put("DateUtils", new DateUtils());
52          MAP.put("DateFormatUtils", new DateFormatUtils());
53      }
54  
55      public Object internalGet(String key) {
56          Object obj = MAP.get(key);
57          return (obj == null) ? super.internalGet(key) : obj;
58      }
59  
60      public boolean containsKey(Object key) {
61          return MAP.containsKey(key) || super.containsKey(key);
62      }
63  
64  }