关于freemarker import 错误的问题

问题描述

两个模板在不同的文件夹里面,在其中的一个模板里用<#import"a/a.ftl"askk>时,总是报错:Errorreadingimportedfilea/a.ftl到底是哪里出错了?请指教。

解决方案

解决方案二:
没有人知道吗
解决方案三:
如果是在同一个包下面,你可以把它改成<#import'a.ftl'askk>我考虑你那不仅仅报Errorreadingimportedfilea/a.ftl这个错可能堆栈里面还有FileNotFound
解决方案四:
下面是LibraryLoad类的构造函数和accept方法的源码LibraryLoad(Templatetemplate,ExpressiontemplateName,Stringnamespace){this.namespace=namespace;StringtemplatePath1=template.getName();intlastSlash=templatePath1.lastIndexOf('/');templatePath=lastSlash==-1?"":templatePath1.substring(0,lastSlash+1);this.templateName=templateName;}voidaccept(Environmentenv)throwsTemplateException,IOException{StringtemplateNameString=templateName.getStringValue(env);if(templateNameString==null){Stringmsg="Error"+getStartLocation()+"Theexpression"+templateName+"isundefined.";thrownewInvalidReferenceException(msg,env);}TemplateimportedTemplate;try{if(!env.isClassicCompatible()){if(templateNameString.indexOf("://")>0){;}elseif(templateNameString.length()>0&&templateNameString.charAt(0)=='/'){intprotIndex=templatePath.indexOf("://");if(protIndex>0){templateNameString=templatePath.substring(0,protIndex+2)+templateNameString;}else{templateNameString=templateNameString.substring(1);}}else{templateNameString=templatePath+templateNameString;}}importedTemplate=env.getTemplateForImporting(templateNameString);}catch(ParseExceptionpe){Stringmsg="Errorparsingimportedtemplate"+templateNameString;thrownewTemplateException(msg,pe,env);}catch(IOExceptionioe){Stringmsg="Errorreadingimportedfile"+templateNameString;thrownewTemplateException(msg,ioe,env);}env.importLib(importedTemplate,namespace);}

关于模板的加载一定要看几句代码:LibraryLoad(Templatetemplate,ExpressiontemplateName,Stringnamespace){//获取<#import>所在模板的名称StringtemplatePath1=template.getName();intlastSlash=templatePath1.lastIndexOf('/');//获取<#import>所在模板的名称的路径templatePath=lastSlash==-1?"":templatePath1.substring(0,lastSlash+1);//<#import>中的表达式,也就是另外一个模板的路径this.templateName=templateName;}

然后在看accept中的代码,主要是几个if条件的判断,它们分别代表集中不同了路径的加载方式:1、if(templateNameString.indexOf("://")>0){;}这一种是绝对路径的书写格式,不做任何处理,后面直接执行env.getTemplateForImporting(templateNameString);2、if(templateNameString.length()>0&&templateNameString.charAt(0)=='/'){intprotIndex=templatePath.indexOf("://");if(protIndex>0){templateNameString=templatePath.substring(0,protIndex+2)+templateNameString;}else{templateNameString=templateNameString.substring(1);}}这一种是表达式以"/"开头的情况,表示是加载在该模板下的文件夹中的模板如:a.ftl中:<#import"/c/b.ftl"askk>b.ftl和a.ftl是同级的,都在c文件夹下3、最后一个else表示通模板在该模板的下一级文件中:templateNameString=templatePath+templateNameString;如:a.ftl中:<#import"c/b.ftl"askk>表示c文件夹和a.ftl同级,b.ftl在c文件夹中
解决方案五:
路径,应该是<#import"/a/a.ftl"askk>

时间: 2024-08-24 14:57:20

关于freemarker import 错误的问题的相关文章

import 错误 求教如何导入自定义类

问题描述 importjava.util.*;importstaticnet.mindview.util.Print.*;//错误行publicclassPRINT{publicstaticvoidmain(String[]args){System.out.println(newData());//错误行}}程序如上,两处错误.1.导入从网站上下载的库出错,貌似下载的文件该放在JAVA的库文件夹里,可是不知道JAVA的库文件夹哪???2.第二个错误貌似导入JAVA.UTIL.*中没有DATA类.

Linux有问必答:如何修复“ImportError: No module named wxversion”错误

问题 我试着在[某某 Linux 发行版]上运行一个 Python 应用,但是我得到了这个错误"ImportError: No module named wxversion.".我怎样才能解决 Python 程序中的这个错误呢? Looking for python... 2.7.9 - Traceback (most recent call last): File "/home/dev/playonlinux/python/check_python.py", li

FreeMarker的基础语法

FreeMarker语言 FreeMarker语言概述 FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写. FreeMarker被设计用来生成HTML Web页面,特别是基于MVC模式的应用程序 虽然FreeMarker具有一些编程的能力,但通常由Java程序准备要显示的数据,由FreeMarker生成页面,通过模板显示准备的数据(如下图)   FreeMarker不是一个Web应用框架,而适合作为Web应用框架一个组件. FreeMarker与容器无关

Strut2和FreeMarker整合时的一些问题

在struts2与freemarker整合时,可以在项目的类路径下放置freemarker.properties配置文件, struts2会自动读取(struts2封装了).今天用freemarker作为模板生成静态文件时,发现并不读取freemarker.properties配置文件. 看一下freemarker源码,freemarker本身并不加载freemarker.properties配置文件,需要代码中指定配置文件. 代码如下:   Java代码   package com.ldl.f

基于Java的Spring框架来操作FreeMarker模板的示例_java

1.通过String来创建模版对象,并执行插值处理  import freemarker.template.Template; import java.io.OutputStreamWriter; import java.io.StringReader; import java.util.HashMap; import java.util.Map; /** * Freemarker最简单的例子 * * @author leizhimin 11-11-17 上午10:32 */ public cl

[freemarker]使用freemarker生成父子关系树抛异常

问题描述 需要生成一个菜单树,使用了freemarker,由于采用了tiles2,在和freemarker整合的时候出现了问题,所以直接使用freemarker 2.3.15将模板通过template.process方法产生html code显示到前端,主要代码如下://产生freemarker configpackage project.util.freemarker;import freemarker.cache.ClassTemplateLoader;import freemarker.t

Freemarker 高级进阶

博学,切问,近思--詹子知 (https://jameszhan.github.io)  这篇文章我们将不介绍Freemarker的基本语法,先来个工具模板utils.ftl,因为下面的操作中会用到这个文件. <#macro mapping map> <#list map?keys as key> ${key}: ${(map[key])!} </#list> </#macro> <#macro listing list> <#list l

一个简单的FreeMarker案例

1,首先:导入FreeMarker的Jar文件 2,写一个JavaBean用于封装数据 package freemarker;   public class UserInfo {          private String uname=null;          private int uage = 0;          public String getUname() {                    return uname;          }          publ

Londiste3 Install

Skytools是一个比较成熟的套件, 包含了pgq, Londiste, wal-manager三大组件. 其中pgq由providers,ticker,consumers组成, provider push events to queue, consumer read events from queue. ticker则负责把batch queue里面的events.  londiste则是基于pgq的一个PostgreSQL数据库复制套件. 与流复制不同之处在于它是基于pgq的, 需要触发器