主题:利用beelt自动生成代码,怎么读取或者加载远程服务器中的模板?

yxg 6天前 45

>>11:20:25:错找不到指定模板或者加载错(TEMPLATE_LOAD_ERROR): 位于0行 资源:http://xxxx/xxx/xxx/xxx.btl,网上我百度的答案是能实现,但是没有案例,纠结了很久我是想利用发帖请给各位大佬帮我看看,我现在很慌又怕打扰到各位!我是个小白,我敢说我什么都不会,我的部分代码

protected void generateFile(String template, String filePath) {
        //个人感觉这个Template对象很重要,只要获得这个对象利用renderTo(fileOutputStream);方法即可生成代码
        Template pageTemplate = groupTemplate.getTemplate(template);
        configTemplate(pageTemplate);
        if (PlatformUtil.isWindows()) {
            filePath = filePath.replaceAll("/+|\\\\+", "\\\\");
        } else {
            filePath = filePath.replaceAll("/+|\\\\+", "/");
        }
        File file = new File(filePath);
        File parentFile = file.getParentFile();
        if (!parentFile.exists()) {
            parentFile.mkdirs();
        }
        FileOutputStream fileOutputStream = null;
        try {
            fileOutputStream = new FileOutputStream(file);
            pageTemplate.renderTo(fileOutputStream);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } finally {
            try {
                fileOutputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

有大佬直接给我个demo我自己去琢磨吗?因为远程服务器上的路径是: http://xxxx/xxx/xxx/xxx.btl.然后获取模板对象Template的参数都是字符串key,不知道怎么利用URL获得Template对象,希望大佬能指点一二,我良辰在此谢过!

闲大赋 6天前

看你如何构造ResourceLoader了

 如果你采用StringResourceLoader 构造的GroupTemplate,你可以根据url,取得其内容,即转为String字符串,那这样加载没问题,比如


protected void generateFile(String url, String filePath) {
       String content  = getUrlContent(url);//
        Template t = groupTemplate.getTemplate(content);

getUrlContent 是抓取url',内容的函数,你自己完成

  • yxg :老哥,我在下面有回复了,我根据字符串生成的Template,报错>>09:28:44:错找不到指定模板或者加载错(TEMPLATE_LOAD_ERROR): 位于0行 资源:<% for(menu i(5天前)
  • yxg :我自己sb了,知道错在哪里了!(5天前)
yxg 5天前

大佬,你教我的方式我试过了,还是报错了,用文件的时候没有报错,代码和文件内容如下,这个如果换成项目resource下的目录找文件是可行的,不知道是不是这个用字符串生成的Template对象不可行: new GroupTemplate().getTemplate(sb.toString())虽然文件生成了,但是里面是没有内容的!还望大佬指点一二,看看我是不是代码写错了.

21.png

3.png

protected void generateFile(String template, String filePath) {
    	if(template.indexOf("http") != -1) {

            try {
            	//创建一个URL实例
            	URL url = new URL("http://192.168.20.20/group1/M01/00/09/wKgUFFub3CmAer4pAAABjPGvkcI576.btl");
                //通过URL的openStrean方法获取URL对象所表示的自愿字节输入流
                InputStream is = url.openStream();
                InputStreamReader isr = new InputStreamReader(is,"utf-8");

                //为字符输入流添加缓冲
                BufferedReader br = new BufferedReader(isr);
                String data = null;//读取数据
                StringBuffer sb = new StringBuffer();
                while ((data = br.readLine())!=null){//循环读取数据
                    data += "\r\n";
                    sb.append(data);
                }
                br.close();
                isr.close();
                is.close();
                GroupTemplate groupTemplate = new GroupTemplate();
                //这个根据读取出来的模板字符串生成的Template有问题!!!
                Template pageTemplate = groupTemplate.getTemplate(sb.toString());
                templateToFile(filePath, pageTemplate);
            } catch (IOException e) {
                e.printStackTrace();
            }
    	}else {
	        Template pageTemplate = groupTemplate.getTemplate(template);
	        templateToFile(filePath, pageTemplate);
    	}
    }

	protected void templateToFile(String filePath, Template pageTemplate) {
		configTemplate(pageTemplate);
		if (PlatformUtil.isWindows()) {
		    filePath = filePath.replaceAll("/+|\\\\+", "\\\\");
		} else {
		    filePath = filePath.replaceAll("/+|\\\\+", "/");
		}
		File file = new File(filePath);
		File parentFile = file.getParentFile();
		if (!parentFile.exists()) {
		    parentFile.mkdirs();
		}
		FileOutputStream fileOutputStream = null;
		try {
		    fileOutputStream = new FileOutputStream(file);
		    pageTemplate.renderTo(fileOutputStream);
		} catch (FileNotFoundException e) {
		    e.printStackTrace();
		} finally {
		    try {
		        fileOutputStream.close();
		    } catch (IOException e) {
		        e.printStackTrace();
		    }
		}
	}
>>09:28:44:错找不到指定模板或者加载错(TEMPLATE_LOAD_ERROR): 位于0行 资源:<% for(menu in sqls.menus!){ %>
INSERT INTO `guns`.`sys_menu` (`id`, `code`, `pcode`, `pcodes`, `name`, `icon`, `url`, `num`, `levels`, `ismenu`, `tips`, `status`, `isopen`) VALUES ('${menu.id}', '${menu.code}', '${menu.pcode}', '${menu.pcodes}', '${menu.name}', '${menu.icon}', '${menu.url}', '${menu.num}', '${menu.levels}', '${menu.ismenu}', NULL, '${menu.status}', '${menu.isopen}');
<% } %>

ClassLoader:org.springframework.boot.devtools.restart.classloader.RestartClassLoader@57b86173 Path:
yxg 5天前

利用字符串生成的模板:

@Test
	public void beetl2() throws Exception {
                //模板字符串
		String temp = "<% for(menu in sqls.menus){ %>\r\n" + 
				"INSERT INTO `guns`.`sys_menu` (`id`, `code`, `pcode`, `pcodes`, `name`, `icon`, `url`, `num`, `levels`, `ismenu`, `tips`, `status`, `isopen`) " +
				"VALUES ('${menu.id}', '${menu.code}', '${menu.pcode}', '${menu.pcodes}', '${menu.name}', '${menu.icon}', '${menu.url}', '${menu.num}', '${menu.levels}', '${menu.ismenu}', NULL, '${menu.status}', '${menu.isopen}');\r\n" + 
				"<% } %>";
		System.err.println(temp);
		String mstr = "[{\"code\":\"student\",\"icon\":\"\",\"id\":\"1040783441916112898\",\"ismenu\":1,\"isopen\":0,\"levels\":2,\"name\":\"\",\"num\":99,\"pcode\":\"system\",\"pcodes\":\"[0],[system],\",\"status\":1,\"url\":\"/student\"}]";
		List<Menu> menus = (List<Menu>) JSON.parse(mstr);
		//System.out.println(menus);
		
		/**第一个beetl*/
		StringTemplateResourceLoader resourceLoader = new StringTemplateResourceLoader();
		Configuration cfg = Configuration.defaultConfiguration();
		GroupTemplate gt = new GroupTemplate(resourceLoader,cfg);
        Template t = gt.getTemplate(temp);
        SqlConfig sql = new SqlConfig();
        sql.setMenus(menus);
        t.binding("sqls",sql);
        String render = t.render();
        System.out.println("render: "+render);
	}

我错在了不是利用StringTemplateResourceLoader这个对象做的资源所以一直报错.哎,自己做事情太不仔细和只知道copy代码,一到报错就懵逼.自己就当记个教训,希望以后改变自己!!!

闲大赋 5天前

哈哈,看了刚前面帖子,正有这个想法,觉得你抄的别人代码,没想到你还是不补充了一下正确答案