我有以下代码,我将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中多次调用该方法的情况下避免此异常?
我在表单中使用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)
提前致谢
是否可以在freemarker中使用和(&&)或者我必须使用嵌套if?
<#if object?exists >
</#if>
Run Code Online (Sandbox Code Playgroud) 在这里学习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.com上h1.
有人可以复制以下内容吗?
在我的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上有相同的行为吗?
我在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)
我怎么能得到它
当我循环遍历下面的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 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是否支持这种概念?
今天我一直在努力从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)
但是这个解决方案有点臭 - 如果我在我的业务控制器中向模型中添加一些东西,我必须在这里添加它.
我的问题有一个优雅的解决方案吗?
我正在使用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
freemarker ×10
java ×6
encoding ×1
forms ×1
html ×1
itext ×1
layout ×1
netbeans ×1
pdf ×1
spring ×1
spring-mvc ×1
templates ×1
templating ×1
tiles ×1
tiles2 ×1