在 freemarker 中比较数字最优雅的是什么?
<#if (variable = 2) ></#if>
Run Code Online (Sandbox Code Playgroud)
这将不包括空检查?
如果我这样做
<#if (variable! = 2) ></#if>
Run Code Online (Sandbox Code Playgroud)
然后freemarker会抱怨不同的类型。
我最终这样做了
<#if (variable!?html = "2") ></#if>
Run Code Online (Sandbox Code Playgroud)
但我想这不是这样做的方式吗?如何将数字与 freemarker 中的空检查进行比较?
在 Fremarker 模板中,我需要访问从 Spring MVC 在 Freemarker 表达式中提供的 i18n 资源包中获取的消息。
我已经从中导入了 Spring 宏,spring.ftl并且可以将消息与以下宏一起使用:
<@spring.messageText "my.key" "Default message" />
Run Code Online (Sandbox Code Playgroud)
但实际上我无法从内部表达式访问消息,例如在内置表达式中:
${myBoolean?string( ###here I want my true message###, ###here I want my false message###)}
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
我正在做 teplate,我将在 Smooks 转换中使用它。我需要在 freemarker 中获取列表的第二个元素,但我不知道该怎么做。freemarker 模板中有我的代码片段。
<#list partnerList as PARTNER>
${PARTNER.partnrid}
${PARTNER.name}
</#list>
Run Code Online (Sandbox Code Playgroud)
还有java类:
public class Partner {
private String PARTNRID;
private String NAME;
public String getPartnrid() {
return PARTNRID;
}
public void setPARTNRID(String PARTNRID) {
this.PARTNRID = PARTNRID;
}
public String getName() {
return NAME;
}
public void setNAME(String NAME) {
this.NAME = NAME;
}
}
Run Code Online (Sandbox Code Playgroud)
正如我之前所说,我只需要第二个元素。我想避免打印其余项目。谢谢!
最近我们升级到 Freemarker 2.3.22。我们在我们的产品中多次实现了 TemplateMethodModel 接口。现在我们收到有关 TemplateMethodModel 已弃用的警告,并考虑使用 TemplateMethodModelEx。
是否有任何特定的事情可以仅使用 TemplateMethodModelEx 完成?
我有一个如下所示的数据结构:
public class Foo {
public Bar bar;
public List<Foo> foos = new ArrayList<>();
}
Run Code Online (Sandbox Code Playgroud)
Foo 的每个实例都可以容纳任意数量的FooS,而这当然又可以包含更多的FooS,依此类推。那么我将如何让 FreeMarker 通过这样的列表呢?
我正在尝试用对象实现模板,它可以是复数。
例如:“有/有 n 只狗。” 当我尝试时There <#if dogNames?size>1>is<#else>are</#if> dogNames?size dog<#if dogNames?size>1>s</#if>,我收到异常
freemarker.core.NonBooleanException:对于“#if”条件:需要一个布尔值,但这已经计算为一个数字(包装器:ftSimpleNumber):==> dogNames?size
即用于比较的尖括号存在问题。
在此博客中,据说双引号足以转义括号,但我无法在 Java 中做到这一点。当我这样声明时
String template = "There <#if dogNames?size\">\"1>is<#else>are</#if> dogNames?size dog<#if dogNames?size>1>s</#if>";
Run Code Online (Sandbox Code Playgroud)
并调用了freemarker api,我收到了异常
freemarker.core.ParseException: Syntax error in template ...:
Encountered "\">\"", but was expecting one of:
"."
".."
<DOT_DOT_LESS>
"..*"
"?"
"??"
"!"
"["
"("
">"
<TERMINATING_EXCLAM>
Run Code Online (Sandbox Code Playgroud)
我正在使用 freemarker 2.3.28,java 8
我们想用 NetSuite FreeMarker 模板中的空格分割一个字符串,并尝试了如下代码:
<#list tranline.inventorydetail?split(" ") as paragraph>
<#if paragraph_index == 0>
<tr>
<td colspan="1" >${showIndex}</td>
<td colspan="4">${tranline.item}</td>
<td align="left" colspan="6">${tranline.description}</td>
<td align="right" colspan="2">${tranline.quantityordered}</td>
<td align="right" colspan="2">${tranline.quantityremaining}</td>
<td align="right" colspan="2">${tranline.quantity}</td>
<td align="left" colspan="4">${paragraph?keep_before(",")}</td>
</tr>
<#else>
<tr>
<td colspan="1" ></td>
<td colspan="4"></td>
<td align="left" colspan="6"></td>
<td align="right" colspan="2"></td>
<td align="right" colspan="2"></td>
<td align="right" colspan="2"></td>
<td align="left" colspan="4">${paragraph?keep_before(",")}</td>
</tr>
</#if>
</#list>
Run Code Online (Sandbox Code Playgroud)
但它不会生效。
以下方法也不会按空格将字符串拆分为数组:
<#list tranline.inventorydetail?split("\\s+") as paragraph>
<#list tranline.inventorydetail?split("\s+") as paragraph>
<#list tranline.inventorydetail?split(" ") as paragraph>
Run Code Online (Sandbox Code Playgroud)
有谁知道如何在 NetSuite FreeeMarker 模板中按空格分割字符串?
我正在使用 Play Framework 和 apache common email + freemarker 开发一个应用程序。使用这个我遇到了问题,每当我发送电子邮件时,我都会收到以下错误消息:
javax.mail.MessagingException: 发送消息时出现 IOException;嵌套异常是:javax.activation.UnsupportedDataTypeException:MIME 类型 multipart/mixed 没有对象 DCH
这是电子邮件堆栈:
package service.email;
import com.google.common.base.Strings;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import freemarker.template.TemplateExceptionHandler;
import org.apache.commons.mail.DefaultAuthenticator;
import org.apache.commons.mail.EmailAttachment;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.ImageHtmlEmail;
import play.Logger;
import utils.ConfigurationUtils;
import utils.enums.EmailTemplates;
import javax.activation.CommandMap;
import javax.activation.MailcapCommandMap;
import javax.inject.Inject;
import javax.inject.Singleton;
import java.io.IOException;
import java.io.StringWriter;
import java.io.Writer;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CompletionStage;
import static java.util.Objects.nonNull;
import static utils.enums.ConfigurationKey.*;
@Singleton
public class EmailService {
@Inject …Run Code Online (Sandbox Code Playgroud) 我正在 Dropwizard 应用程序中设置视图,但遇到了一个关于 Freemarker 的奇怪问题。
public class ExampleFreemarkerView extends View {
private Foo foo;
public ContractHtmlView(Foo Foo) {
super("FooView.ftl");
this.foo = foo;
}
public Contract getFoo() { return foo };
}
public class Foo {
public String bar = "Hello World";
}
Run Code Online (Sandbox Code Playgroud)
和 FooView.ftl
<html>
<body>
<h1>${foo.bar}</h1>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
呈现时的预期输出ExampleFreemarkerView是显示 的 HTML 文档Hello World。
实际发生的是 Freemarker 抛出异常,抱怨${foo.bar}- 特别bar是 - 未定义。
这似乎是因为bar是一个公共字段,没有吸气剂。当我向 中添加public String getBar() …
java freemarker public-members dropwizard dropwizard-templates
我正在开发环境中将 Keycloak 从 9.x 升级到 12.x。我最初复制了一些自定义主题,发现样式严重损坏(不足为奇)。我查看了我的 FTL 文件,将一些核心更改复制到我的主题中,并且情况好多了 - 只是一些小问题需要调整。
现在的问题。我已对 login.css 文件进行了更改,但这些更改未显示在浏览器中。它继续获取我的自定义 CSS 文件的旧版本。
我尝试过的(大多数情况下多次尝试):
我现在还为我删除的一些 CSS 规则搜索了整个 Keycloak 目录,但我找不到任何可能被意外引用的“旧”css 文件的任何副本。
此外,加载 CSS 文件时,Keycloak 日志中没有消息。
我想弄清楚如何让 Keycloak 将更新后的 CSS 传送到浏览器。
freemarker ×10
java ×4
apache ×2
dropwizard ×1
email ×1
javascript ×1
keycloak ×1
netsuite ×1
regex ×1
smooks ×1
split ×1
spring-mvc ×1
templates ×1