Java 在Freemarker中处理null
情况:Java 在Freemarker中处理null,java,null,freemarker,Java,Null,Freemarker,情况: 使用freemarker的旧java项目有许多已完成的模板,它们工作得非常好 每个模板都使用数据表单事务对象 此事务对象非常大,因为它包装了有关事务的所有数据 在模板中有很多这样的表达式: get(“object1”).getNestedObject2().getNestedObject3().getValue() 问题: 出现了新的要求:所有模板都必须在没有实际数据的情况下进行预览处理。所有数字应为零,所有字符串应为--- 不满意的解决方案: 重新制作所有模板以检查空值。(工作量大
- 使用freemarker的旧java项目有许多已完成的模板,它们工作得非常好
- 每个模板都使用数据表单事务对象
- 此事务对象非常大,因为它包装了有关事务的所有数据
- 在模板中有很多这样的表达式: get(“object1”).getNestedObject2().getNestedObject3().getValue()李>
或者您能找到更好的解决方案吗?如果您需要向模板显示虚拟数据模型,最好的选择可能是自定义的
ObjectWrapper
(请参见Configuration.setObjectWrapper
)。读取数据模型的所有内容都通过TemplateModel
-s运行,根TemplateModel
由ObjectWrapper
生成,因此它可以控制模板为哪些名称获取的值。但问题是,当必须为名称返回一个伪值时,如何判断其类型?这不仅仅是要确定它是一个字符串还是一个数字,还要确定它是一个方法(比如getNestedObject2
)还是一个散列(后面可以跟
)。有帮助的是FreeMarker允许一个值具有多种类型,因此您可以返回一个值,该值可以用作方法、哈希和字符串。根据hack的应用程序可能足够好,除了,您仍然必须确定值是字符串还是数字,因为如果值同时是字符串和数字,${}
将打印数值。您使用的是哪个版本的Freemarker和Java?另外,您是否使用了其他框架来帮助您绑定这些技术?我使用的是freeMarker 2.3.20和java 1.7。不,我不使用任何其他框架。你能把你的事务对象转换成平面图来简化一切吗?我看不到任何简单的方法。好像要做很多工作。