freemarker 相关问题

FreeMarker是一个基于Java的模板引擎,是一个基于模板生成文本输出(从HTML到自动生成的源代码)的通用工具。它是一个Java包,是Java程序员的类库。它本身并不是最终用户的应用程序,而是程序员可以嵌入到他们的产品中的东西。

Liferay Freemaker:如何在模板中获取Request对象?

我正在使用 Liferay 6.2 和 freemaker 作为网页内容模板。我需要在模板中获取请求对象。当我尝试使用 ${Request.getRequest()} 时,它会抛出错误“表达式请求未定义”....

回答 3 投票 0

如何强制Keycloak使用浏览器默认语言?

我已经设置了一个带有我自己主题的Keycloak服务器。 Keycloak 应该支持多种语言,但我不想显示选择器。 相反,Keycloak 应该回退到默认浏览器

回答 1 投票 0

在 freemarker 中格式化 Duration 对象的好方法是什么?

我有一个 java Duration 对象,其格式应为 xml 中的 hh:mm:ss。 ${持续时间} 但它是用标准格式呈现的。 PT30S 我有一个 java Duration 对象,其格式应为 xml 中的 hh:mm:ss。 <Duration>${duration}</Duration> 但它是用标准格式渲染的。 <Duration>PT30S</Duration> 我在java中有一个可以格式化持续时间的方法,它目前用于json映射。 public static String format(Duration value) { long hours = value.toHours(); int minutes = value.toMinutesPart(); int seconds = value.toSecondsPart(); int millis = value.toMillisPart(); return millis == 0 ? String.format("%02d:%02d:%02d", hours, minutes, seconds) : String.format("%02d:%02d:%02d.%03d", hours, minutes, seconds, millis); } 我还需要在 freemarker 中渲染 Duration。是否可以在 freemarker 中使用相同的方法? 从 FreeMarker 2.3.32 开始,任何 Java 8 时态类都没有内置格式。 (虽然有一个开发分支具有半完成的实现,但甚至还没有解决Duration。) 但是,您当然可以从 FreeMarker 调用静态实用方法。您必须将其值放入数据模型(模板上下文)中,并使用您喜欢的名称(如本例中的 MyUtils)((BeansWrapper) cfg.getObjectWrapper()).getStaticModels().get(MyUtils.class.getName()),其中 cfg 是 FreeMarker Configuration 单例。

回答 1 投票 0

如何正确折叠 NetSuite 高级 PDF/HTML 模板单元格之间的边框?

我希望在 NetSuite 中使用高级 PDF/HTML 模板时折叠单元格之间的边框。 电流输出示例 所需输出的示例 我尝试过添加边框领子...

回答 0 投票 0

带有列表指令的 Responsys 块会破坏浏览器视图

数据通过 API 传入,有效负载包含作为具有多个属性(例如名称、数量、大小、颜色)的字段的项目。 这是使用 List 指令的电子邮件块: 姓名:${

回答 0 投票 0

尝试连接字符串数组,使它们出现在使用 FTL 模板的下一行

这里是字符串数组,myArray = ["green","blue","red"],我想在 html 页面的下一行显示每个值 “绿色的” “蓝色的” “红色的” 我...

回答 1 投票 0

如何检查 ftl 文件中是否存在特定的 xml 标签

我有一个如下所示的 xml 文件。 <

回答 0 投票 0

如何从 liferay 7.4 中的菜单和面包屑中获取 instance_id

我正在尝试在主题中插入带有模板的自定义菜单,但我没有足够的信息。我有这个代码<@liferay.navigation_menu instance_id="XXX" />,但我不知道怎么...

回答 0 投票 0

从 FTL 中的 Json 数据计算月数

我是 ftl 的新手,我有一个由 ftlh 文件读取的下面的 json。我正在尝试创建一个表,我需要将同一个月的列组合在一起。为此,我需要计算相同的 m...

回答 0 投票 0

在 Maven 中使用 freemarker

抱歉,如果这个问题看起来有点愚蠢,我正在为一个项目发现 Maven 和 Freemarker,在浏览 Freemarker 的文档时,我看到了要放入 pom.xml 文件以包含 freem 的 xml 代码...

回答 0 投票 0

Netsuite 高级 PDF/模板 - 仅显示项目组 - 无套件项目

我们目前将我们的装箱单从基本的 PDF 版本移动到高级 PDF/HTML 模板,并遇到了在装箱单上显示项目组的问题。 Item 上的 XML 数据

回答 0 投票 0

如何得到InputStream作为FreeMarker处理的结果?

我有一个界面: 公共接口资源{ 输入流是(); } 我想编写一个提供 Freemarker 处理结果的实现: 公共类 FreemarkerResource 实现

回答 0 投票 0

避免java包'freemarker'执行命令

我使用 Apache Freemarker 作为我的模板引擎。 我有一个安全问题,我不确定如何处理: 管理员用户能够修改模板,但万一他们将设置输入...

回答 1 投票 0

Freemarker 模板:调用 java 方法并将返回的字符串用作 html

我有一个 ftl freemarker 模板文件,我将一些对象(包含所需元素的列表)传递给它并尝试处理 html 输出页面。问题是我需要实施一些补偿......

回答 1 投票 0

Freemarker ftl 模板调用 java 方法并使用返回的 html 字符串

我有一个 ftl freemarker 模板文件,我将一些对象(包含所需元素的列表)传递给它并尝试处理 html 输出页面。问题是我需要实施一些补偿......

回答 0 投票 0

如何以 FreeMarker 形式发送浮点值(type number 只允许整数)

美好的一天。你能帮我解决我的问题吗。我正在努力以 Apache Free Marker 形式发送浮点值。我有 type=number,但它只允许整数。如果我将类型更改为文本,我将丢失 ch ...

回答 0 投票 0

Keycloak 添加自定义 Freemarker 页面并访问它

Keycloak有问题(我是新手): 我们设置并运行了 Keycloak,定义了一个使用的自定义主题。当应用程序中的特定事件发生时,我希望用户登录...

回答 1 投票 0

Freemarker 一个接一个地申请加入

得到这样一个数据: { “key1” : [ “value1”, “value2” ], “key2”:[“value3”,“value4”], “key3”:[“value5”,“

回答 1 投票 0

多个 fo:retrieve-marker 同名

两个页脚具有相同的 fo:retrieve-marker、retrieve-class-name 和 retrieve-boundary,如果我用 fo:mar 调用标记类名称,现在唯一不同的是检索位置。 .

回答 0 投票 0

在 spring boot 中从 freemaker 获取“以下已评估为空或缺失”

我有以下 pom.xml 文件。 我有以下 pom.xml 文件。 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.0.2</version> <relativePath /> <!-- lookup parent from repository --> </parent> <groupId>com.chat</groupId> <artifactId>app</artifactId> <version>0.0.1-SNAPSHOT</version> <name>app</name> <description>A chat application written in spring boot</description> <properties> <java.version>17</java.version> <spring-boot-admin.version>3.0.0-M4</spring-boot-admin.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency> <!-- <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-starter-client</artifactId> </dependency> <dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-starter-server</artifactId> </dependency> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-tracing-bridge-brave</artifactId> </dependency> <dependency> <groupId>io.zipkin.reporter2</groupId> <artifactId>zipkin-reporter-brave</artifactId> </dependency> <!-- https://mvnrepository.com/artifact/com.mysql/mysql-connector-j --> <dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <version>8.0.32</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.amqp</groupId> <artifactId>spring-rabbit-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.restdocs</groupId> <artifactId>spring-restdocs-mockmvc</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-test</artifactId> <scope>test</scope> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-dependencies</artifactId> <version>${spring-boot-admin.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.asciidoctor</groupId> <artifactId>asciidoctor-maven-plugin</artifactId> <version>2.2.1</version> <executions> <execution> <id>generate-docs</id> <phase>prepare-package</phase> <goals> <goal>process-asciidoc</goal> </goals> <configuration> <backend>html</backend> <doctype>book</doctype> </configuration> </execution> </executions> <dependencies> <dependency> <groupId>org.springframework.restdocs</groupId> <artifactId>spring-restdocs-asciidoctor</artifactId> <version>${spring-restdocs.version}</version> </dependency> </dependencies> </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <excludes> <exclude> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </exclude> </excludes> </configuration> </plugin> </plugins> </build> </project> 我有以下控制器类。 package com.example.demo; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestParam; @Controller public class Controllers { @GetMapping("/signup") public String getSignUpPage(@RequestParam String name, @ModelAttribute ModelMap modelMap) { System.out.println("Name is: " + name); modelMap.addAttribute("name", name); return "signup"; } } 我有以下 freemaker 模板文件。 <html> <head></head> <body> <h1>Hello, ${name}</h1> </body> </html> 当我访问 http://localhost:8080/signup?name=rahul 时,出现以下错误。 Hello, FreeMarker template error (DEBUG mode; use RETHROW in production!): The following has evaluated to null or missing: ==> name [in template "signup.ftlh" at line 6, column 22] ---- 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. (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: ${name} [in template "signup.ftlh" at line 6, column 20] ---- Java stack trace (for programmers): ---- freemarker.core.InvalidReferenceException: [... Exception message was already printed; see it above ...] at freemarker.core.InvalidReferenceException.getInstance(InvalidReferenceException.java:134) at freemarker.core.EvalUtil.coerceModelToTextualCommon(EvalUtil.java:481) at freemarker.core.EvalUtil.coerceModelToStringOrMarkup(EvalUtil.java:401) at freemarker.core.EvalUtil.coerceModelToStringOrMarkup(EvalUtil.java:370) at freemarker.core.DollarVariable.calculateInterpolatedStringOrMarkup(DollarVariable.java:104) at freemarker.core.DollarVariable.accept(DollarVariable.java:63) at freemarker.core.Environment.visit(Environment.java:335) at freemarker.core.Environment.visit(Environment.java:341) at freemarker.core.Environment.process(Environment.java:314) at freemarker.template.Template.process(Template.java:383) at org.springframework.web.servlet.view.freemarker.FreeMarkerView.processTemplate(FreeMarkerView.java:329) at org.springframework.web.servlet.view.freemarker.FreeMarkerView.doRender(FreeMarkerView.java:264) at org.springframework.web.servlet.view.freemarker.FreeMarkerView.renderMergedTemplateModel(FreeMarkerView.java:215) at org.springframework.web.servlet.view.AbstractTemplateView.renderMergedOutputModel(AbstractTemplateView.java:179) at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:314) at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1414) at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1158) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1097) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:973) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1011) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:705) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:814) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:223) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:185) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158) at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:185) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158) at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:185) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158) at org.springframework.web.filter.ServerHttpObservationFilter.doFilterInternal(ServerHttpObservationFilter.java:109) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:185) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:185) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:177) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:119) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:400) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:859) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1734) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.base/java.lang.Thread.run(Thread.java:833) 为什么会出现这个问题? 我的目录结构 我认为你不应该在那里使用@ModelAttribute。试试这个: @GetMapping("/signup") public String getSignUpPage(@RequestParam String name, Model model) { 我还将 ModelMap 更改为 org.springframework.ui.Model 作为更通用的方法。 根据 https://freemarker.apache.org/docs/pgui_misc_servlet.html Freemarker 还会自动将请求参数放入 RequestParameters 哈希变量中。所以你甚至不需要自己将参数放入模型中,这个 freemarker 代码就足够了: <h1>Hello, ${RequestParameters.name}</h1> 看起来 freemarker 2.3.32 不能使用 spring boot 3。 例如,以下代码适用于 spring boot 2.6.7、freemarker 2.3.31,但不适用于 spring boot 3.0.4 <h1>Hello, ${RequestParameters.name}</h1> 你会得到这样的异常: Hello, FreeMarker template error (DEBUG mode; use RETHROW in production!): The following has evaluated to null or missing: ==> RequestParameters [in template "main.ftl" at line 24, column 18] ---- 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. (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: ${RequestParameters.name} [in template "main.ftl" at line 24, column 16] ---- Java stack trace (for programmers): ---- 我认为 Freemarker 仍然使用旧的 java ee 包,如 javax.servlet 而不是 jakarta.servlet

回答 2 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.