FreeMarker是一个基于Java的模板引擎,是一个基于模板生成文本输出(从HTML到自动生成的源代码)的通用工具。它是一个Java包,是Java程序员的类库。它本身并不是最终用户的应用程序,而是程序员可以嵌入到他们的产品中的东西。
无法从 Spring Boot 方法返回 Freemarker 视图
目前,我正在做一个小项目,需要使用Spring Boot和FreeMarker模板引擎。我尝试了不同的方法,但仍然无法从 Spring Boot 返回 FreeMarker 视图。我的
JspTaglib [“http://tiles.apache.org/tags-tiles”]未定义:它无法分配给tiles
我正在对一个非常旧的Java项目进行更新转换,并在Spring Boot下进行转换。但是,我很难渲染首页,因为它们是用 Struts 2 构建的......
我是 freemarker 的新手。 在 freemarker 中,我想对 DateTime 执行算术表达式,如下所示: ${triggerTimestamp}-1h 但这是行不通的。有人可以帮忙吗?
我正在使用 Struts 2 和 Freemarker。这是我的动作课: 封装测试; 导入java.util.ArrayList; 导入java.util.List; 公共类WelcomeAction { 私有字符串用户名; 公关...
Freemarker.core.InvalidReferenceException 尝试验证用户输入时出现错误 Apache FreeMarker出租物业
有这样的ftlh文件和注册表: 出租物业 有这样的ftlh文件和注册表: <!DOCTYPE html> <html lang="en"> <head> <title>Rental Property</title> </head> <body> <h2>User Registration</h2> <form action="/registration" method="POST"> <label for="name">Name:</label> <input type="text" id="name" name="name" value="${userForm.name!}" required> <#if errors?? && errors?has_content && errors.hasFieldErrors("name")> <div style="color:red;">${errors.getFieldError('name').defaultMessage}</div> </#if> <label for="lastName">Last Name:</label> <input type="text" id="lastName" name="lastName" value="${userForm.lastName!}" required> <#if errors?? && errors?has_content && errors.hasFieldErrors("lastName")> <div style="color:red;">${errors.getFieldError("lastName").defaultMessage}</div> </#if> <label for="email">Email Address:</label> <input type="email" id="email" name="email" value="${userForm.email!}" required> <#if errors?? && errors?has_content && errors.hasFieldErrors("email")> <div style="color:red;">${errors.getFieldError("email").defaultMessage}</div> </#if> <label for="phone">Phone:</label> <input type="tel" id="phone" name="phone" value="${userForm.phone!}"> <#if errors?? && errors?has_content && errors.hasFieldErrors("phone")> <div style="color:red;">${errors.getFieldError("phone").defaultMessage}</div> </#if> <label for="password">Password:</label> <input type="password" id="password" name="password" required> <#if errors?? && errors?has_content && errors.hasFieldErrors("password")> <div style="color:red;">${errors.getFieldError("password").defaultMessage}</div> </#if> <label for="replayPassword">Repeat Password:</label> <input type="password" id="replayPassword" name="replayPassword" required> <#if errors?? && errors?has_content && errors.hasFieldErrors("replayPassword")> <div style="color:red;">${errors.getFieldError("replayPassword").defaultMessage}</div> </#if> <label for="birthday">Date of Birth:</label> <input type="date" id="birthday" name="birthday"> <#-- <#if errors?has_content && errors.hasFieldErrors("birthday")>--> <#-- <div style="color:red;">${errors.getFieldError("birthday").defaultMessage}</div>--> <#-- </#if>--> <button type="submit">Register</button> </form> </body> </html> 有这样一种post请求处理方法: @PostMapping("/registration") public String registration(@ModelAttribute @Valid UserForm userForm, BindingResult result, Model model) { userValidator.validate(userForm, result); model.addAttribute("errors", result); if (result.hasErrors()) return "registration"; return "redirect:/"; } UserForm.java 类的每个字段上方是来自 jakarta.validation.constraints 的验证注释以及自定义验证器类。 当尝试在此控制器方法内发送有错误的数据时,验证将按其应有的方式工作,查找所有错误,并在尝试向用户显示不正确的数据时发生错误: freemarker.core.InvalidReferenceException: The following has evaluated to null or missing: ==> errors.getFieldError('name') [in template "registration.ftlh" at line 14, column 35] ---- Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: ${errors.getFieldError("name").defaul... [in template "registration.ftlh" at line 14, column 33] ---- at freemarker.core.InvalidReferenceException.getInstance(InvalidReferenceException.java:134) ~[freemarker-2.3.33.jar:2.3.33] at freemarker.core.UnexpectedTypeException.newDescriptionBuilder(UnexpectedTypeException.java:85) ~[freemarker-2.3.33.jar:2.3.33]... 我尝试将 ftlh 文件中的错误键更改为单引号,更改验证,发送整个组装的 UserForm 对象。 我怀疑问题是您没有启用公开 Java 8 默认方法。它是必需的,因为 FreeMarker 基于 java.beans.Introspector(官方 JavaBeans 内省器),而它忽略了它们。因此,正如 2.3.26 的版本历史记录所示(https://freemarker.apache.org/docs/versions_2_3_26.html): 添加了解决方法(默认情况下未启用)以将 Java 8 默认方法(以及它们定义的 bean 属性)公开给模板,尽管 java.beans.Introspector(官方 JavaBeans 内省器)会忽略它们,至少从 JRE 1.8.0_66 开始是这样。要启用此解决方法,请将 incompatibleImprovements 或 DefaultObjectWrapper 的 BeansWrapper 构造函数参数的值增加到 2.3.26,或者将其 treatDefaultMethodsAsBeanMembers 设置设置为 true。请注意,如果您将 object_wrapper 的 Configuration 设置保留为默认值,则将 incompatibleImprovements 的 Configuration 设置增加到 2.3.26 就足够了,因为它是由默认 object_wrapper 继承的。 我的建议是增加 incompatibleImprovements 的 Configuration 设置。否则,会模拟一些令人惊讶的问题以实现 100% 向后兼容性。有一个关于如何设置它的页面: https://freemarker.apache.org/docs/pgui_config_inknown_improvements.html#pgui_config_inknown_improvements_how_to_set
Velocity 还是 FreeMarker? 它们看起来几乎相同,甚至语法也是如此? 用什么?或者什么时候用什么?
Joda ISODateTimeFormat 不在字符串中使用时区
我有一个由两部分组成的问题,或者可能有两种不同的方法来解决这个问题。我收到一个类似于 2015-11-17T17:10:24-0800 的 ISO 字符串。最终目标是在某些 HTML 中将字符串显示为 11/17/15 5:10 PM
使用 N/render addRecord 将记录添加到渲染器时出现问题
我正在开发一个在新窗口中显示支票 PDF 的 Suitelet。一切都按预期工作,只是我现在在渲染 PDF 本身时遇到了问题。 常量 renderPdfTemplate = (
Spring Boot Freemarker 不会显示 html 页面
我有一个 Spring Boot 应用程序,我需要在其中使用 Freemarker 在浏览器中显示 HTML 页面。 我是 Freemarker 新手,我什至很难显示一个简单的 HTML 页面,而且我不知道...
freemarker 输出有问题... [#分配选项HTML = ""] [#将数据列为项目] [#分配 optionsHTML = optionsHTM...
Ftl 文件未在 Apache Camel+Springboot+Email 集成中呈现
Apache Camel+Springboot+电子邮件集成。 我正在尝试渲染一个 ftl 模板作为对发送到我的后端聊天机器人的电子邮件查询的回复。但是,我的 .ftl 文件无法渲染,并出现如下错误...
Freemarker Fallback 无法在 Spring Boot 中使用多个模板加载器
我正在开发一个 Spring Boot 项目,我使用 Freemarker 进行模板化。我在 Freemarker 的配置中配置了多个 TemplateLoader,以从两个不同的 CDN URL 加载模板:a
我正在使用 Free Marker 创建 Netsuite 自定义表单。我试图迭代记录对象中的每个项目并为相应的条目创建一行。 我用
我无法在资产类别导航 portlet 配置中选择 ADT(Liferay 7.4)
我告诉你,我正在开发的Liferay版本是:liferay-ce-portal-7.4.3.112-ga112。 问题是我无法选择 ADT 模板,因为它没有显示在资产类别中
.freemarker 模板中的区域设置正在返回希伯来语/印度尼西亚语的旧 ISO 639 语言代码
.locale 返回希伯来语的旧 ISO 639 代码,即“iw_IL”。但我需要最新的代码“he_IL”。我们可以将旧的 ISO 转换为最新的 ISO...
我正在使用 freemarker 开发一个命令行应用程序。我想使用 native-maven-plugin 将应用程序构建为 graalvm 本机映像。当我在命令行(MacOS 上的 zsh)上启动应用程序时,我得到
我正在尝试在springboot中使用freemarker生成文档。 模板有: 我正在尝试在 springboot 中使用 freemarker 生成文档。 模板有: <tr> <td style="width: 100%" align='center'> <div class="logo-container"> <img class="company-logo" src="${companyLogo}" alt="LOGO" align='center'" /> </div> </td> </tr> “公司徽标”的值为: ..../image/tmpimages.png.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20240725T043642Z&X-Amz-SignedHeaders=host&X-Amz-Expires=360000&X-Amz-Credential=xxxxxxxxxxxx%wdddeddd%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Signature=..... 此设置给出的错误为: "Can't load the XML resource (using TrAX transformer). org.xml.sax.SAXParseException; lineNumber: 87; columnNumber: 180; The reference to entity \"X-Amz-Date\" must end with the ';' delimiter." 这是什么原因造成的?那么解决办法是什么? 打开 HTML 自动转义!如果没有它生成 HTML 也会存在安全风险。 HTML 自动转义将在输出中将 & 替换为 &。 如何开启自动转义?使用 ftlh 文件扩展名而不是 ftl 是最简单的方法。如果您无法做到这一点,并且也无法更改 FreeMarker 配置中的默认值,请使用 <#ftl output_format="HTML"> 启动模板。 另请参阅:https://freemarker.apache.org/docs/dgui_quickstart_template.html#dgui_quickstart_template_autoescaping
我意识到在java中GC最终会清理对象,但我问不关闭字符串编写器是否是不好的做法,目前我正在这样做: 私有静态字符串 processTemplate(
我正在尝试解析 xml 并从 xml 中读取一个大数值。我想在解析中将数字值视为字符串,但由于某种原因,我在解析 xm 后得到了不同的数字...
这是freemarker递归函数调用的POC代码。实际代码有点复杂。 在这里,当我调用上面的模板时,该函数会递归地调用自身。我初始化临时变量...