Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Freemarker中处理null_Java_Null_Freemarker - Fatal编程技术网

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()
问题: 出现了新的要求:所有模板都必须在没有实际数据的情况下进行预览处理。所有数字应为零,所有字符串应为---

不满意的解决方案:

  • 重新制作所有模板以检查空值。(工作量大,不安全)
  • 创建包含所有默认值的事务对象。(大量工作)
  • 我的问题是:我可以对Freemarker说,如果他发现null或者一路上发现null,如果他期望的是数字或者-,如果他期望的是字符串,那么他应该使用0


    或者您能找到更好的解决方案吗?

    如果您需要向模板显示虚拟数据模型,最好的选择可能是自定义的
    ObjectWrapper
    (请参见
    Configuration.setObjectWrapper
    )。读取数据模型的所有内容都通过
    TemplateModel
    -s运行,根
    TemplateModel
    ObjectWrapper
    生成,因此它可以控制模板为哪些名称获取的值。但问题是,当必须为名称返回一个伪值时,如何判断其类型?这不仅仅是要确定它是一个字符串还是一个数字,还要确定它是一个方法(比如
    getNestedObject2
    )还是一个散列(后面可以跟
    )。有帮助的是FreeMarker允许一个值具有多种类型,因此您可以返回一个值,该值可以用作方法、哈希和字符串。根据hack的应用程序可能足够好,除了,您仍然必须确定值是字符串还是数字,因为如果值同时是字符串和数字,
    ${}
    将打印数值。

    您使用的是哪个版本的Freemarker和Java?另外,您是否使用了其他框架来帮助您绑定这些技术?我使用的是freeMarker 2.3.20和java 1.7。不,我不使用任何其他框架。你能把你的事务对象转换成平面图来简化一切吗?我看不到任何简单的方法。好像要做很多工作。