标签: freemarker

如何将数字与 freemarker 中的空检查进行比较?

在 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 中的空检查进行比较?

freemarker

2
推荐指数
1
解决办法
3910
查看次数

Spring MVC/Freemarker:在 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)

我怎样才能做到这一点?

freemarker spring-mvc internationalization

2
推荐指数
1
解决办法
4204
查看次数

Freemarker从列表中获取元素

我正在做 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 smooks

2
推荐指数
1
解决办法
2万
查看次数

Freemarker 使用 TemplateMethodModelEx 相对于 TemplateMethodModel 有什么优势

最近我们升级到 Freemarker 2.3.22。我们在我们的产品中多次实现了 TemplateMethodModel 接口。现在我们收到有关 TemplateMethodModel 已弃用的警告,并考虑使用 TemplateMethodModelEx。

是否有任何特定的事情可以仅使用 TemplateMethodModelEx 完成?

freemarker

2
推荐指数
1
解决办法
967
查看次数

FreeMarker 递归嵌套列表

我有一个如下所示的数据结构:

public class Foo {
    public Bar bar;
    public List<Foo> foos = new ArrayList<>();
}
Run Code Online (Sandbox Code Playgroud)

Foo 的每个实例都可以容纳任意数量的FooS,而这当然又可以包含更多的FooS,依此类推。那么我将如何让 FreeMarker 通过这样的列表呢?

java freemarker

2
推荐指数
1
解决办法
2425
查看次数

如何检查该数组在 Apache FreeMarker 中的大小 &gt; 1?

我正在尝试用对象实现模板,它可以是复数。

例如:“有/有 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

java apache templates freemarker

2
推荐指数
1
解决办法
6522
查看次数

如何在 NetSuite freemarker 模板中按空格分割字符串?

我们想用 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("&nbsp;") as paragraph>
Run Code Online (Sandbox Code Playgroud)

有谁知道如何在 NetSuite FreeeMarker 模板中按空格分割字符串?

javascript regex split freemarker netsuite

2
推荐指数
1
解决办法
1386
查看次数

MIME 类型多部分/混合没有对象 DCH

我正在使用 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)

java apache email freemarker playframework

2
推荐指数
1
解决办法
3136
查看次数

Freemarker:在模板中没有 getter 的情况下访问公共字段

我正在 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

2
推荐指数
1
解决办法
3346
查看次数

Keycloak CSS 未在浏览器中更新

我正在开发环境中将 Keycloak 从 9.x 升级到 12.x。我最初复制了一些自定义主题,发现样式严重损坏(不足为奇)。我查看了我的 FTL 文件,将一些核心更改复制到我的主题中,并且情况好多了 - 只是一些小问题需要调整。

现在的问题。我已对 login.css 文件进行了更改,但这些更改未显示在浏览器中。它继续获取我的自定义 CSS 文件的旧版本。

我尝试过的(大多数情况下多次尝试):

  • 清除浏览器缓存
  • 重启 Keycloak
  • 检查主题文件的所有权/权限
  • 重启整个服务器
  • 直接加载 CSS 文件
  • 添加无意义参数直接加载 CSS 文件(试图绕过任何可能的中间人缓存)
  • 确认新版本的 Keycloak 正在运行
  • 在其他浏览器中加载页面

我现在还为我删除的一些 CSS 规则搜索了整个 Keycloak 目录,但我找不到任何可能被意外引用的“旧”css 文件的任何副本。

此外,加载 CSS 文件时,Keycloak 日志中没有消息。

我想弄清楚如何让 Keycloak 将更新后的 CSS 传送到浏览器。

freemarker keycloak

2
推荐指数
1
解决办法
1816
查看次数