当前位置: 首页 > 知识库问答 >
问题:

使用freemarker为自定义变量格式化xml模板

康烨伟
2023-03-14

我使用freemarker为我的xml自定义变量格式化模板,比如_prop.var1。下面是我在map中保存所有道具的上下文并试图使用map格式化变量的数据。

<道具>

at freemarker.core.InvalidReferenceException.getInstance(InvalidReferenceException.java:134) ~[freemarker-2.3.25-incubating.jar:2.3.25]
at freemarker.core.UnexpectedTypeException.newDesciptionBuilder(UnexpectedTypeException.java:80) ~[freemarker-2.3.25-incubating.jar:2.3.25]
at freemarker.core.UnexpectedTypeException.<init>(UnexpectedTypeException.java:43) ~[freemarker-2.3.25-incubating.jar:2.3.25]
at freemarker.core.NonHashException.<init>(NonHashException.java:49) ~[freemarker-2.3.25-incubating.jar:2.3.25]
at freemarker.core.Dot._eval(Dot.java:48) ~[freemarker-2.3.25-incubating.jar:2.3.25]
at freemarker.core.Expression.eval(Expression.java:81) ~[freemarker-2.3.25-incubating.jar:2.3.25]
at freemarker.core.DollarVariable.calculateInterpolatedStringOrMarkup(DollarVariable.java:96) ~[freemarker-2.3.25-incubating.jar:2.3.25]
at freemarker.core.DollarVariable.accept(DollarVariable.java:59) ~[freemarker-2.3.25-incubating.jar:2.3.25]
at freemarker.core.Environment.visit(Environment.java:327) [freemarker-2.3.25-incubating.jar:2.3.25]
at freemarker.core.Environment.visit(Environment.java:333) [freemarker-2.3.25-incubating.jar:2.3.25]
at freemarker.core.Environment.process(Environment.java:306) [freemarker-2.3.25-incubating.jar:2.3.25]
at freemarker.template.Template.process(Template.java:386) [freemarker-2.3.25-incubating.jar:2.3.25]

提前谢了。

共有1个答案

孟高峰
2023-03-14

我注意到您在说“尝试使用map:{_prop.var1:xxx},但这也不起作用”。我不确定这到底是什么意思(比如Java代码是什么),但是如果您已经尝试了variables.put(“_prop.var1”,“xxx”),那么这将不起作用,因为当您在模板中编写_prop.var1时,FreeMarker将首先查找_prop,如果找到了,则在该模板中查找_prop,然后在该模板中查找var1。它不会查找“_prop.var1”键(为此,您必须在模板中编写_prop\.var1,以便它将点视为名称的一部分,而不是运算符)。要使模板中的_prop.var1工作,必须执行以下操作:

Map<String, Object> prop = new HashMap<>();
variables.put("_prop", prop);
prop.put("Var1", "XXX");
... add further subvariables to prop

BTWprop不必是map,它也可以是具有所需bean属性的Java bean。因此,如果它是一个带有公共字符串getVar1(){return“xxx”;}的公共类,那么您可以将其称为_prop.var1(小写v,正如JavaBeans规范所说)。

 类似资料:
  • 找到价格最高和最低的信息: mysql> SELECT @min_price:=MIN(price),@max_price:=MAX(price) FROM shop; mysql> SELECT * FROM shop WHERE [email protected]_price OR [email protected]_price; +---------+--------+-------+ |

  • 问题内容: 我根本不确定这是否是可以解决的问题,但是假设我有一个freemarker模板,我想问一下该模板使用了哪些变量。 就我的目的而言,我们可以假设freemarker模板非常简单- 只是“根级别”条目(此类模板的模型可以是简单的Map)。换句话说,我不需要处理要求嵌套结构等的模板。 问题答案: 我有相同的任务要从Java端的模板获取变量列表,除了使用反射之外,没有找到任何好的方法。我不确定是

  • 我正在使用FreeMarker构建一个基于模板的代码生成器。由于用户可以用任何语言生成代码,因此在数据模型中提供特定于语言的设置(例如包)是不合适的。但是,如果在FreeMarker模板中定义了它们,则必须定义它们(除非它们是可选的)。 此代码利用FreeMarker抛出的异常查找丢失的值。然后,它用一个临时值填充它们,以便找到其他丢失的值。 源代码: Template:

  • ObjectMapper不会将对象格式化为自定义对象。 波乔不在我的控制之下,所以我不能改变它。我需要序列化WS的POJO对象。POJO有(我不知道为什么,因为它的日期来自数据库)。 我使用的是Spring boot 2.1.8。释放,所以。。。我将其放入我的依赖项中: 我还在应用程序中添加了这个。特性: 在配置文件中,我在配置文件中添加了这个bean,因为尽快配置ObjectMapper以接受更

  • 我想使用静态定义的模板来构建URL。 我正在尝试为此使用 ES6 字符串插值功能 预期结果:http://example.com/?name=John 实际结果:http://example.com/?name=${name} 如果这不能用字符串插值来实现,那么还有比<code>string.prototype更好的方法。替换like

  • 问题内容: 我必须使用字典中的值格式化字符串,但是该字符串已经包含大括号。例如: 但是,当然会导致KeyErro。 有没有办法使用不同的符号来使用? 这不是我如何在python字符串中打印文字大括号字符并在其上使用.format的重复项?因为我需要保持大括号不变,并为使用不同的定界符。 问题答案: 语境 python 2.7 允许自定义占位符语法的替代方法 问题 我们要在Python str.fo