/** * 创建默认模板组{@link GroupTemplate},默认的模板组从ClassPath中读取 * * @return {@link GroupTemplate} */ public static GroupTemplate createGroupTemplate() { return new GroupTemplate(); }
/** * 获得模板 * * @param groupTemplate {@link GroupTemplate} * @param source 模板资源,根据不同的 {@link ResourceLoader} 加载不同的模板资源 * @return {@link Template} */ public static Template getTemplate(GroupTemplate groupTemplate, String source) { return groupTemplate.getTemplate(source); }
@Override public void initOther() { groupTemplate.registerFunctionPackage("images", new DefaultImages()); groupTemplate.registerFunctionPackage("shiro", new ShiroExt()); groupTemplate.registerFunctionPackage("tool", new ToolUtil()); groupTemplate.registerFunctionPackage("kaptcha", new KaptchaUtil()); groupTemplate.registerFunction("env", new Function() { @Override public String call(Object[] paras, Context ctx) {
public static Template getByName(String templateName) { try { ClasspathResourceLoader resourceLoader = new ClasspathResourceLoader("/template/"); Configuration cfg = Configuration.defaultConfiguration(); GroupTemplate gt = new GroupTemplate(resourceLoader, cfg); return gt.getTemplate(templateName); } catch (IOException e) { throw new RuntimeException("获取模板异常"); } }
/** 执行脚本,和参数,返回脚本里的Root scope的变量 * @param script * @return */ public static Map executeAndReturnRootScopeVars(String script) { String start = gt.getConf().getStatementStart(); String end = gt.getConf().getStatementEnd(); if(end==null) { end = ""; } StringBuilder sb = new StringBuilder(script.length() + start.length() + end.length()); sb.append(start).append(script); sb.append(end); Template t = gt.getTemplate(sb.toString()); // t.binding(paras); t.render(); Map<String, Integer> idnexMap = t.program.metaData.getTemplateRootScopeIndexMap(); Object[] values = t.ctx.vars; Map<String, Object> result = new HashMap<String, Object>(); for (Entry<String, Integer> entry : idnexMap.entrySet()) { String name = entry.getKey(); int index = entry.getValue(); Object value = values[index]; result.put(name, value); } return result; }
public static void main(String[] args) { GroupTemplate gt = new GroupTemplate(); gt.registerFunctionPackage("shiro", new ShiroExt()); } }
groupTemplate.registerFunction(entry.getKey(), entry.getValue()); groupTemplate.registerDefaultFormat(entry.getKey(), entry.getValue()); groupTemplate.registerFormat(entry.getKey(), entry.getValue()); groupTemplate.registerTagFactory(entry.getKey(), entry.getValue()); groupTemplate.registerFunctionPackage(entry.getKey(), entry.getValue()); groupTemplate.registerVirtualAttributeClass(entry.getKey(), entry.getValue()); groupTemplate.registerVirtualAttributeEval(virtualAttributeEval);
/** * @return 返回当前模板引擎配置对象 */ public Configuration getEngineConfig() { return __groupTemplate.getConf(); }
@Override public void initOther() { groupTemplate.registerFunctionPackage("shiro", new ShiroExt()); groupTemplate.registerFunctionPackage("tool", new ToolUtil()); groupTemplate.registerFunctionPackage("kaptcha", new KaptchaUtil()); groupTemplate.registerTagFactory("dictSelector", new TagFactory() { @Override public Tag createTag() { groupTemplate.registerFunction("env", new Function() { @Override public String call(Object[] paras, Context ctx) {
/** * 无法根据请求的url找到对应的path变量,因此暂时先不支持path变量,使用$$来代替 * @param path * @return */ protected RestPath getRealPath(String path,String method){ return getRealPath(gt.getResourceLoader(),path,method); }
/** * 注册一个function包,包名由packageName指定,方法名是对象o里的所有方法 * 如果方法定义为void,则方法返回null,如果方法参数最后一个Context,则传入一个Context * * @param packageName * @param o */ public void registerFunctionPackage(String packageName, Object o) { checkFunctionName(packageName); registerFunctionPackage(packageName, o.getClass(), o); }
private Resource getResource(GroupTemplate gt,String name){ Map<String, String> resourceMap = gt.getConf().getResourceMap(); String functionSuffix = resourceMap.get("functionSuffix"); String functionRoot = resourceMap.get("functionRoot"); String path = name.replace(".", "/"); Resource resource = gt.getResourceLoader().getResource(functionRoot+"/"+path+"."+functionSuffix); return resource; }
sqlManager.getBeetl().getGroupTemplate().registerFunction(entry.getKey(), entry.getValue()); sqlManager.getBeetl().getGroupTemplate().registerTagFactory(entry.getKey(), entry.getValue());
protected void registerFunctionPackage(String packageName, Class target, Object o) { List<FunctionWrapper> list = FunctionWrapper.getFunctionWrapper(packageName, target, o); for (FunctionWrapper fw : list) { this.registerFunction(fw.functionName, fw); } }
protected void handleNullPath(HttpServletRequest req,HttpServletResponse rsp){ String commonFile = getCommonValueFile(req, rsp); Map commonData = new HashMap(); if (commonFile!=null&>.getResourceLoader().exist(commonFile)) { try { commonData = gt.runScript(commonFile, new HashMap()); } catch (ScriptEvalError e) { throw new SimulateException("伪模型脚本有错!", e); } } Iterator it = commonData.keySet().iterator(); while (it.hasNext()) { String key = (String) it.next(); Object value = commonData.get(key); setValue(key, value, req); } String path = this.getRenderPath(req); WebRender render = new WebRender(gt); render.render(path, req, rsp, null); return ; }
public static String fill(String content, Map<String, Object> params) throws IOException { StringTemplateResourceLoader resourceLoader = new StringTemplateResourceLoader(); Configuration cfg = Configuration.defaultConfiguration(); GroupTemplate gt = new GroupTemplate(resourceLoader, cfg); Template t = gt.getTemplate(content); t.binding(params); return t.render(); }
/** 执行脚本,和参数,返回脚本里的Root scope的变量 * @param script * @return */ public static Map executeAndReturnRootScopeVars(String script) { String start = gt.getConf().getStatementStart(); String end = gt.getConf().getStatementEnd(); if(end==null) { end = ""; } StringBuilder sb = new StringBuilder(script.length() + start.length() + end.length()); sb.append(start).append(script); sb.append(end); Template t = gt.getTemplate(sb.toString()); // t.binding(paras); t.render(); Map<String, Integer> idnexMap = t.program.metaData.getTemplateRootScopeIndexMap(); Object[] values = t.ctx.vars; Map<String, Object> result = new HashMap<String, Object>(); for (Entry<String, Integer> entry : idnexMap.entrySet()) { String name = entry.getKey(); int index = entry.getValue(); Object value = values[index]; result.put(name, value); } return result; }
protected void initBeetlEngine() { Properties properties = new Properties(); properties.put("RESOURCE.root", ""); properties.put("DELIMITER_STATEMENT_START", "<%"); properties.put("DELIMITER_STATEMENT_END", "%>"); properties.put("HTML_TAG_FLAG", "##"); Configuration cfg = null; try { cfg = new Configuration(properties); } catch (IOException e) { e.printStackTrace(); } ClasspathResourceLoader resourceLoader = new ClasspathResourceLoader(); groupTemplate = new GroupTemplate(resourceLoader, cfg); groupTemplate.registerFunctionPackage("tool", new ToolUtil()); }
groupTemplate.registerFunction(entry.getKey(), entry.getValue()); groupTemplate.registerDefaultFormat(entry.getKey(), entry.getValue()); groupTemplate.registerFormat(entry.getKey(), entry.getValue()); groupTemplate.registerTagFactory(entry.getKey(), entry.getValue()); groupTemplate.registerFunctionPackage(entry.getKey(), entry.getValue()); groupTemplate.registerVirtualAttributeClass(entry.getKey(), entry.getValue()); groupTemplate.registerVirtualAttributeEval(virtualAttributeEval);
public static RuntimeException throwCastException(ClassCastException ex,GroupTemplate gt){ String clsName = gt.getConf().getEngine(); if(clsName.equals("org.beetl.core.engine.DefaultTemplateEngine")){ return ex; }else{ String detail = ex.getMessage(); detail = detail + "如果采用优化引擎,会假定传给模板的变量是同一类型,如果不是,请使用directive dynamic 变量;来避免"; throw new RuntimeException(detail,ex); } }