FreeMarker是一个基于Java的模板引擎,是一个基于模板生成文本输出(从HTML到自动生成的源代码)的通用工具。它是一个Java包,是Java程序员的类库。它本身并不是最终用户的应用程序,而是程序员可以嵌入到他们的产品中的东西。
抱歉,如果这个问题看起来有点愚蠢,我正在为一个项目发现 Maven 和 Freemarker,在浏览 Freemarker 的文档时,我看到了要放入 pom.xml 文件以包含 freem 的 xml 代码...
Netsuite 高级 PDF/模板 - 仅显示项目组 - 无套件项目
我们目前将我们的装箱单从基本的 PDF 版本移动到高级 PDF/HTML 模板,并遇到了在装箱单上显示项目组的问题。 Item 上的 XML 数据
如何得到InputStream作为FreeMarker处理的结果?
我有一个界面: 公共接口资源{ 输入流是(); } 我想编写一个提供 Freemarker 处理结果的实现: 公共类 FreemarkerResource 实现
我使用 Apache Freemarker 作为我的模板引擎。 我有一个安全问题,我不确定如何处理: 管理员用户能够修改模板,但万一他们将设置输入...
Freemarker 模板:调用 java 方法并将返回的字符串用作 html
我有一个 ftl freemarker 模板文件,我将一些对象(包含所需元素的列表)传递给它并尝试处理 html 输出页面。问题是我需要实施一些补偿......
Freemarker ftl 模板调用 java 方法并使用返回的 html 字符串
我有一个 ftl freemarker 模板文件,我将一些对象(包含所需元素的列表)传递给它并尝试处理 html 输出页面。问题是我需要实施一些补偿......
如何以 FreeMarker 形式发送浮点值(type number 只允许整数)
美好的一天。你能帮我解决我的问题吗。我正在努力以 Apache Free Marker 形式发送浮点值。我有 type=number,但它只允许整数。如果我将类型更改为文本,我将丢失 ch ...
Keycloak 添加自定义 Freemarker 页面并访问它
Keycloak有问题(我是新手): 我们设置并运行了 Keycloak,定义了一个使用的自定义主题。当应用程序中的特定事件发生时,我希望用户登录...
得到这样一个数据: { “key1” : [ “value1”, “value2” ], “key2”:[“value3”,“value4”], “key3”:[“value5”,“
两个页脚具有相同的 fo:retrieve-marker、retrieve-class-name 和 retrieve-boundary,如果我用 fo:mar 调用标记类名称,现在唯一不同的是检索位置。 .
在 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
在NetSuite中,如何在高级PDF/HTML模板中打印相关记录
我在 NetSuite 中创建了一张发票。我还接受了 PAYMENT 并在我创建的发票上应用了 CREDIT。有谁知道如何打印出相关记录,这是一个“列表”类型,包含...
我使用 ModelAttribute 在 Spring Web 应用程序中绑定对象。 一旦我注意到,如果一个对象的布尔值 A 为真,那么如果我们取消选中 A 的复选框,它的值将不会更新。 对于
如何在 Spring 中从现有 bean 创建 bean 列表
我正在将一个旧的 Spring 项目迁移到 SpringBoot。旧项目具有基于 XML 的配置。 我在旧配置中有一个 beans 声明列表,如下所示: 我正在将一个旧的Spring项目迁移到SpringBoot。旧项目具有基于XML的配置。 我在旧配置中有一个 beans 声明列表,如下所示: <bean id="basic" class="com.xyz.Parameter" abstract=true> </bean> <!-- List --> <util:list id="searches"> <bean parent="basic" id="roles"> <property name="name" value="abc"> ... ... </bean> <bean parent="basic" id="simple"> <property name="name" value="abc"> ... ... </bean> <bean parent="basic" id="user"> <property name="name" value="abc"> ... ... </bean> </util:list> 现在,在 Java 配置文件中,我正在做如下操作: @Configuration class WebConfig{ @Bean ("Basic") public Parameter basic(){ return Parameter.builder () .format (Pattern.compile("^ [A-Za-20-9]") .maxLength (100) build(); } @Bean public Parameter simple (@Qualifier ("Basic") Parameter basic){ return basic.toBuilder () .field ("attribute") .Label ("Attribute Nane").build(); } @Bean public Parameter user(@Qualifier ("Basic") Parameter basic){ Parameter product = basic. toBuilder () .field ("product") .label ("Product").build(); } //TODO: List implementation @Bean("searches") public List< Parameter> getSearch(){ return List.of(user()); //It requires params } } 计划是编制一份所有豆子的清单,并在需要时将其用作@Resource。 那么,构建 beans 列表的最佳技术是什么?我应该使用 BeanFactory 检索 bean 并将它们添加到列表中,而不是单独调用每个 bean 函数吗? 声明多个相同类型的bean后,您可以只使用@Autowired List<MyBean> myBeans;或@Autowired Map<String, MyBean> myBeans;,其中映射键是一个bean名称。 @Autowired 只是这里的一个例子,任何 Spring 注入类型都可以。 如前一个答案所述,您可以简单地注入一组具有相同类型的 bean。 有关此方法的更多信息,您可以在本文中找到
如何从 FreeMarker 模板调用对象上的 java 方法?
是否可以调用从 Freemarker 模板获取参数的方法? 我有一个对象模型,我正在尝试使用 Freemarker 将其呈现到网页中。其中一个对象有一个方法...
我需要根据字符串日期获取一年中的当前周。 例如 07.03.2023 => 2023 年第 10 周 在文档中,我找到了很多帮手,但一年中的那一周都没有。 <#assign aDate = theD...
我正在寻找一种使用 Freemarker 根据数据项列表中的数据类型 (int) 生成分组报告的方法。 所以例如我有: data.datatype = 1 其中数据有 id = 1 数据.dat...
如何在 Java NetBeans 14 中安装 Hibernate 插件?
我正在尝试使用 JDK 11 在我的 IDE NetBeans 版本 14 上安装休眠插件,但是当我尝试这样做时出现此错误: “一些插件需要安装插件 Freemarker Integration。
在 Freemarker 中,我可以使用 .now?time 来获取当前时间,但我如何将它与另一个时间进行比较? 例如,如果当前时间在上午 8:00 到下午 5:00 之间,我将如何正确测试? &...
当我试图通过控制器传输大量数据时,我得到一个错误。有一个意外的错误(type=Bad Request, status=400)。Failed to convert value of type 'java.lang.String' to ...