标签: freemarker

如何从可能返回null的方法中分配变量?

我有以下代码,我将Java方法的结果分配给freemarker变量.

<#assign singleBenchmark = solverBenchmark.findSingleBenchmark(problemBenchmark)>
Run Code Online (Sandbox Code Playgroud)

问题是该Java方法的返回值可能null.即使我检查该变量是否不是null:

<#if !singleBenchmark??>
    <td></td>
<#else>
    <td>${singleBenchmark.score}</td>
</#if>
Run Code Online (Sandbox Code Playgroud)

<#assign ...>如果Java方法返回null,它仍会在行上崩溃,但有以下异常:

freemarker.core.InvalidReferenceException: Error on line 109, column 45 in index.html.ftl
solverBenchmark.findSingleBenchmark(problemBenchmark) is undefined.
It cannot be assigned to singleBenchmark
    at freemarker.core.Assignment.accept(Assignment.java:111)
Run Code Online (Sandbox Code Playgroud)

如何在不必findSingleBenchmark在我的ftl中多次调用该方法的情况下避免此异常?

java freemarker

8
推荐指数
1
解决办法
5971
查看次数

在表单中使用时,accept-charset ="UTF-8"参数不会执行任何操作

我在表单中使用accept-charset ="utf-8"属性,发现在使用非ascii进行表单发布时,标头在请求标头中有不同的accept charset选项.有什么我想念的吗?我的表格看起来像这样

<form method="post" action="controller" accept-charset="UTF-8">
..input text box
.. submit button
</form>
Run Code Online (Sandbox Code Playgroud)

提前致谢

html forms encoding freemarker spring-mvc

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

在freemarker中

是否可以在freemarker中使用和(&&)或者我必须使用嵌套if?

<#if object?exists >


</#if>
Run Code Online (Sandbox Code Playgroud)

freemarker

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

在FreeMarker上获取URL的queryString

在这里学习FTL.

我正在尝试在我的FTL页面上添加一个查询字符串,比如http://localhost/search,我想在URL上添加一个查询字符串,http://localhost/search?bing这样用户可以在没有查询字符串时使用默认设置进行切换.

但是,我没有从URL获取queryString的运气.我也试图避免在此使用JavaScript解决方案.

这是我的代码:

<#if RequestParameters.bing?exists >
    <#assign useServer = "http://www.bing.com">
<#else>
    <#assign useServer = "http://www.google.com">
</#if>

<h1>${useServer}</h1>
Run Code Online (Sandbox Code Playgroud)

打字查询字符串到URL仍返回http://www.google.comh1.

java freemarker

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

NetBeans无法识别许可证模板中的$ {project.organization}

有人可以复制以下内容吗?

在我的NetBeans 7.2项目中,我将"project.license"属性(在project.properties中)设置为"apache20",以便NetBeans在每个新的.java文件中生成相应的许可证文本.许可证文本(位于"license-apache20.txt"中)包含以下FreeMarker参考:

${project.organization!user}
Run Code Online (Sandbox Code Playgroud)

如果未设置"project.organization",则会按预期显示我的用户名.此外,当我在User.properties文件中设置自定义用户名时,它会显示此用户名.到现在为止还挺好.

但是,我想设置"project.organization"属性.但是当我在project.properties文件中执行此操作时,NetBeans根本无法识别它,而是显示我的用户名.

当我从FreeMarker引用中删除"!user"时,它会生成文本"Expression project.organization未定义在第4行,模板/ Licenses/license-apache20.txt中的第59列." 当我在User.properties中设置属性时(愚蠢的地方,但我是为了分析而做的)我得到了相同的行为.有谁知道什么可能是错的或如何让NetBeans找到"project.organization"属性?有人在他或她的NetBeans上有相同的行为吗?

java templates netbeans freemarker project-properties

8
推荐指数
1
解决办法
2353
查看次数

如何在Freemarker列表之间获取逗号

我在freemarker中迭代一个java列表,但我想在这些单词之间使用逗号.这是我的代码

<#list key_list[key] as value >${value?js_string}, </#list>
Run Code Online (Sandbox Code Playgroud)

这给了我输出

a,b,c,d,
Run Code Online (Sandbox Code Playgroud)

我想要这种格式的输出:(最后没有逗号)

a,b,c,d
Run Code Online (Sandbox Code Playgroud)

我怎么能得到它

java freemarker

8
推荐指数
2
解决办法
3377
查看次数

FreeMarker错误:左侧操作数:预期哈希值,但这会计算为序列

当我循环遍历下面的freemarker中的列表时,它工作正常.

<#list cModel.products as product>
Run Code Online (Sandbox Code Playgroud)

但是,当我要将列表的大小分配给变量时,

 <#assign totalProducts = cModel.products.getList()?size>
Run Code Online (Sandbox Code Playgroud)

我从下面的免费标记中得到一个例外

左手操作数:预期哈希值,但这会计算为序列

有什么建议?

freemarker

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

FreeMarker布局可以减少模板冗余吗?

根据FreeMarker include语句文档,您可以像这样制作页眉和页脚感知模板:

<#include "/header.ftl">
<!-- Content of my this page -->
<#include "/footer.ftl">
Run Code Online (Sandbox Code Playgroud)

但如果我的网络应用程序有数百个页面/视图,这是一个冗余的复制意大利面.如果在FreeMarker中有一个" 布局 "概念,那就太棒了,我可以说" 嘿,这是一个布局: "

<#include "/header.ftl">
<@import_FTL_Somehow>
<#include "/footer.ftl">
Run Code Online (Sandbox Code Playgroud)

然后为每个视图创建/页(单独的模板index.ftl,contactUs.ftl等等),然后告诉FreeMarkers其中FTL文件"使用"的布局.这样我就不必在每个模板文件中继续指定页眉/页脚包含.

FreeMarker是否支持这种概念?

layout freemarker templating

8
推荐指数
1
解决办法
3004
查看次数

Spring + Tiles2 + Freemarker - 通过Freemarker Servlet或Spring的FreeMarkerViewResolver集成?

今天我一直在努力从Freemarker迁移到Tiles2 + Freemarker.

我的freemarker模板使用来自spring.ftl的宏.

如果我在web.xml中提供fremarker servlet,我的模型对于freemarker是可见的,但是特定的spring变量(自然地)不会填充到模型中,因为FreemarkerView对它负责.

如果我为特定的url配置一个单独的DispatcherServlet(比如"/ tpl/*")并将freemarker解析器配置为该servlet的默认视图解析器并提供UrlFilenameViewController作为默认控制器,那么特殊的spring变量会填充到模型中,但是我自己的模型是不可见:它被绑定为请求属性.我可以通过$ {Request.mymodel.myvar}访问我的模型,但这样我必须更改所有的freemarker模板,我发现这个想法有些臭.

现在我的解决方案是扩展UrlFilenameViewController并将我的模型从请求添加到ModelAndView:

protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response)  {
        ModelAndView mav = super.handleRequestInternal(request, response);

        HashMap<String, Object> map = new HashMap<String, Object>();

        Enumeration<String> attributes = request.getAttributeNames();

        while(attributes.hasMoreElements()) {
            String attribute = attributes.nextElement();

            if("model".equals(attribute)) {
                logger.debug("FreemarkerViewController.handleRequestInternal: putting attribute to model: " + attribute + "=" + request.getAttribute(attribute));
                map.put(attribute, request.getAttribute(attribute));
            }
        }
        logger.debug("FreemarkerViewController.handleRequestInternal: VIEW: " + mav.getViewName());
        return new ModelAndView(mav.getViewName(), map);
    }
Run Code Online (Sandbox Code Playgroud)

但是这个解决方案有点臭 - 如果我在我的业务控制器中向模型中添加一些东西,我必须在这里添加它.

我的问题有一个优雅的解决方案吗?

java spring freemarker tiles tiles2

7
推荐指数
1
解决办法
3265
查看次数

将Freemarker转换为PDF

我正在使用freemarker设计报告,我有一个问题,我需要PDF格式的处理输出.

我想要做的是将HTML + CSS fremarker模板传递给freemarker引擎,并将处理后的HTML作为PDF输出.我目前遇到的问题是如何将已处理的freemarker转换为PDF

    try {
        Configuration cfg = new Configuration();
        Template tpl = cfg.getTemplate("example.ftl");
        OutputStreamWriter output = new OutputStreamWriter(System.out);

        Map testHashMap = new HashMap();
        testHashMap.put("test", "testValue");

        tpl.process(testHashMap, output);

    } catch (Exception e) {
        e.printStackTrace();
    }
Run Code Online (Sandbox Code Playgroud)

在互联网上搜索时,我无法找到有关此主题的任何信息,但我发现了iText框架

try {
    DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
    Document doc = builder.parse(new StringBufferInputStream(buf.toString()));
    ITextRenderer renderer = new ITextRenderer();
    renderer.setDocument(doc, null);
    renderer.layout();
    OutputStream os = response.getOutputStream();
    renderer.createPDF(os);
    os.close();
} catch (Exception ex) {
    ex.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)

现在的问题是如何将这两个代码片段组合起来生成pdf?

所有帮助都非常感谢

此致,MilindaD

java pdf template-engine freemarker itext

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