标签: freemarker

从classpath设置freemarker模板

我有一个Web应用程序,我需要手动获取Freemarker模板 - 模板是通过库项目中的类获得的,但实际的tpl文件包含在Web应用程序类路径中.因此,有2个项目,一个是"taac-backend-api",另一个是"taac-web"; taac-backend-api有代码来获取模板并对其进行处理,但是taac-web是模板存储的地方(具体在:WEB-INF/classes/email/vendor.tpl) - 我尝试过使用的所有内容使用Freemarkers setClassForTemplateLoading方法弹出classpath资源.我认为这会奏效:

    freemarkerConfiguration = new Configuration();
    freemarkerConfiguration.setClassForTemplateLoading(this.getClass(), "");
    Template freemarkerTemplate = freemarkerConfiguration.getTemplate("/email/vendor.tpl");
Run Code Online (Sandbox Code Playgroud)

但是,我总是得到一个FileNotFoundException.有人可以解释从类路径获取模板的最佳方法吗?

谢谢.

freemarker

35
推荐指数
3
解决办法
3万
查看次数

将对象列表传递给Freemarker然后循环

我一直在熟悉FreeMarker,它是Java的模板引擎.

我到了能够通过哈希映射将对象传递给模板引擎的地步.这没关系.但是一旦我尝试将任何类型的多个对象集合传递给FreeMarker,它就会给我一个freemarker.template.TemplateException并抱怨它"预期的集合或序列.作业被评估为freemarker.template.SimpleHash".

根据我在各种资源中阅读的理解,这是可以预料的.

现在,我做了大量的腿部工作,发现很多人评论如何解决这个问题.但是,坦率地说,(a)对于许多例子,我不清楚他们的建议在我的案例中是如何适用的 - 尽管我已经知道Java基础知识很长一段时间我对一些架构很新关于Java Web应用程序和(b)我对哪种方法是最好的方法感到困惑.

在最简化的层面上,我想要做的就是基本上:

  1. 我有一个简单的Servlet.

  2. 我有一个简单的类(对于这个名为Invoice的例子),它有一些方法和属性.

  3. 我想让我的servlet(以某种方式)通过FreeMarker的处理方法呈现这些对象(或这些对象的视图)的实例的列表/数组/序列/散列图.

  4. 我想让我的.ftl模板循环遍历list/array/sequence/hashmap并显示方法结果,如下所示:

< # list invoices as invoice> 
Invoice note: ${invoice.getNote()}, Invoice Amount:${invoice.getAmount()} 
< / # list>
Run Code Online (Sandbox Code Playgroud)

现在,我不一定在寻找快速而肮脏的解决方案.我是FreeMarker的新手,但我希望以优雅和优秀的设计正确的方式做到这一点.所以我愿意完全重新思考这种方法.有人可以帮助我看看我需要做些什么才能让这样的事情发挥作用?

java servlets freemarker

35
推荐指数
1
解决办法
6万
查看次数

如何在freemarker中检查空列表

说我的java代码有List<String> listS =null,我把它传递给我的模板文件.

现在我想确保这一点if list has some data then only do something.

我试过了

<#if listS = null>
AND
<#if !listS>
AND
<#if listS?size=0>
Run Code Online (Sandbox Code Playgroud)

但这些似乎都没有奏效.我的java代码有一些逻辑; 通过它,如果某些条件为真,那么我new这就listS填充它.

因此,我需要知道是否listS已填充或仅在我的模板文件中为空.

我该怎么做呢?谢谢.

编辑:此外,我有一个结构列表,每个包含这个列表,(填充或不是一个不同的问题),我传递整个结构列表,因此传递一个布尔值与模板文件以及我的列表结构是不可能的,因为我将不得不在每个列表中遍历,并且我想在模板文件本身中进行遍历.

编辑2:对于那些知道什么是Java null的人,FreeMarker 2.3.x将它们视为缺失值.简单地说,模板语言不知道null的概念.例如,如果你有一个具有maidenName属性的bean,并且该属性的值为null,那么就模板而言,就像没有这样的属性一样(假设你没有)配置FreeMarker使用一些极端的对象包装器,即).返回null的方法调用的结果也被视为缺失变量(同样,假设您使用了一些常用的对象包装器).请参阅常见问题解答.

Freemarker手册

但是我仍然没有得到如何让它工作的答案,如果可以的话.

java null freemarker

35
推荐指数
3
解决办法
4万
查看次数

不会关闭一个字符串写入器导致泄漏?

我意识到在java中GC最终会清理对象,但是我问是不是关闭你的字符串编写器是不好的做法,目前我这样做:

 private static String processTemplate(final Template template, final Map root) {
        StringWriter writer = new StringWriter();
        try {
            template.process(root, writer);
        } catch (TemplateException e) {
            logger.error(e.getMessage());
        } catch (IOException e) {
            logger.error(e.getMessage());
        }
        finally {

        }

        return writer.toString();
    }
Run Code Online (Sandbox Code Playgroud)

我应该关闭编写器并创建一个像这样的新String:

String result = "";

...

finally {
  result = writer.toString();
  writer.close();
}
Run Code Online (Sandbox Code Playgroud)

这样做更好吗?

java memory-management freemarker stringwriter

33
推荐指数
2
解决办法
1万
查看次数

StringTemplate和FreeMarker之间的主要区别是什么?

网似乎充满了Velocity和FreeMarker之间的比较,它们似乎相当合理.但似乎几乎没有StringTemplate和FreeMarker之间的比较!

那么,StringTemplate和FreeMarker之间的主要区别是什么?

我对它们的用法是仅生成HTML页面.在这两个中,我会期望FreeMarker更合适,更有能力,因为这似乎更常见 - 但通过快速浏览一下,看起来StringTemplate实际上有更合适的功能!

如果使用过两者的人都有时间发表评论会很棒 - 对于实际细节,我可以并排阅读文档,但我想要开始使用.

java velocity freemarker stringtemplate

29
推荐指数
2
解决办法
9771
查看次数

如何在Freemarker中输出$ {expression}而不解释它?

我正在尝试将Freemarker与jQuery模板结合使用.

两个框架都使用美元符号/花括号来标识替换的表达式(或者在freemarker中调用它们,"插值"),例如${person.name}.

因此,当我在该语法中定义带有表达式的jQuery模板时,Freemarker会尝试解释它们(并失败).

我试图逃避的各种组合${顺序通过的Freemarker通过它无济于事- ,\${,\$\{,$\{等.

在美元和卷曲(例如$<#-- -->{expression})DOES工作之间插入一个freemarker评论- 但我正在寻找一个更简洁和优雅的解决方案.

有没有更简单的方法来获得Freemarker模板输出字符序列${

freemarker el jquery-templates

29
推荐指数
2
解决办法
2万
查看次数

如何在spring中获取freemaker模板中的请求上下文

使用时如何在freemarker模板中获取请求上下文路径spring

我的观点解析器是这样的

    <bean id="freeMarkerViewResolver" class="learn.common.web.view.FreemarkerViewResolver">
        <property name="order" value="1" />
        <property name="viewClass"
        value="org.springframework.web.servlet.view.freemarker.FreeMarkerView" />
        <property name="suffix" value=".ftl" />
        <property name="cache" value="false" />
    </bean>
Run Code Online (Sandbox Code Playgroud)

我的视图解析器learn.common.web.view.FreemarkerViewResolver扩展了org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver

spring freemarker spring-mvc

28
推荐指数
2
解决办法
2万
查看次数

如何处理在Spring MVC中呈现视图时抛出的异常?

我有一个Spring MVC应用程序,它使用FreeMarker作为View技术(但也许视图技术对我的问题并不重要).我需要拦截在请求期间可能抛出的所有异常.

我已经实现了HandlerExceptionResolver,但只有在控制器中发生异常时才会执行此解析程序.但是当控制器返回ModelAndView并且在渲染视图时发生异常(因为找不到变量或类似的东西),则不会调用异常解析器,而是在浏览器窗口中获得堆栈跟踪.

我还尝试在控制器中使用异常处理程序方法,该方法返回视图并使用@ExceptionHandler对其进行注释,但这也不起作用(很可能是因为异常不会在控制器中抛出但在视图中).

那么是否有一些Spring机制可以注册一个捕获视图错误的异常处理程序?

java spring freemarker spring-mvc

27
推荐指数
2
解决办法
2万
查看次数

如何从src/main/resources文件夹中读取Freemarker模板文件?

如何从我的代码(Spring Boot应用程序)访问存储在src/main/resources文件夹中的freemarker模板(*.ftl)文件?

我尝试了以下内容

freemarker.template.Configuration config = new Configuration();
configuration.setClassForTemplateLoading(this.getClass(), "/resources/templates/");
Run Code Online (Sandbox Code Playgroud)

并获得以下异常

freemarker.template.TemplateNotFoundException: Template not found for name "my-template.ftl".
Run Code Online (Sandbox Code Playgroud)

spring freemarker maven spring-boot

27
推荐指数
2
解决办法
2万
查看次数

在SimpleSequence中添加值 - FreeMarker

我们如何在Freemarker中已经创建的SequenceModel实例中添加值?

例如:我有以下创建List(SequenceModel)的方法:

<#assign x = ["red", 16, "blue", "cyan"]>
Run Code Online (Sandbox Code Playgroud)

现在有办法,我可以在上面的列表中添加另一种颜色吗?

freemarker

23
推荐指数
3
解决办法
3万
查看次数