>>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对象,希望大佬能指点一二,我良辰在此谢过!
看你如何构造ResourceLoader了
如果你采用StringResourceLoader 构造的GroupTemplate,你可以根据url,取得其内容,即转为String字符串,那这样加载没问题,比如
protected void generateFile(String url, String filePath) {
String content = getUrlContent(url);//
Template t = groupTemplate.getTemplate(content);
getUrlContent 是抓取url',内容的函数,你自己完成
大佬,你教我的方式我试过了,还是报错了,用文件的时候没有报错,代码和文件内容如下,这个如果换成项目resource下的目录找文件是可行的,不知道是不是这个用字符串生成的Template对象不可行: new GroupTemplate().getTemplate(sb.toString())虽然文件生成了,但是里面是没有内容的!还望大佬指点一二,看看我是不是代码写错了.
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:
利用字符串生成的模板:
@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代码,一到报错就懵逼.自己就当记个教训,希望以后改变自己!!!
哈哈,看了刚前面帖子,正有这个想法,觉得你抄的别人代码,没想到你还是不补充了一下正确答案