【问题标题】:Can't access mixed (camel) case Java variable names using FreeMarker无法使用 FreeMarker 访问混合(骆驼)大小写 Java 变量名
【发布时间】:2012-01-06 17:16:37
【问题描述】:

我正在使用 FreeMarker (2.3.18) 访问自定义类中的 Java 变量。当变量名混合大小写(驼峰式)时,我收到一条错误消息,指出该变量不存在。

这是我班的一个sn-p:

 public class Student{

       private String name_last, nameFirst;

       public String getName_last(){
        return name_last;
       }

       public String getNameFirst(){
        return nameFirst;
       }
   }

在我的 FreeMarker 模板中,${passedInStudent.name_last} 成功返回值,但 ${passedInStudent.nameFirst} - 返回错误提示

freemarker.core.InvalidReferenceException: Expression
    passedInStudent.nameFirst is undefined on line ...
  1. 在 FreeMarker 中使用驼峰式变量名称是否存在已知问题?
  2. 这个特定版本的 FreeMarker 是否存在问题?
  3. 有控制它的配置吗?
  4. 我访问这些变量的方式是否还有其他问题?

【问题讨论】:

  • 欢迎来到 SO。请注意,虽然建议在向 SO 发帖时记住提出问题,但也建议将其限制为每个帖子 1 个问题(而不是 4 个)。如果问题密切相关,您可能会没事,但请注意 1 q。更标准。
  • 应该可以。如果您遇到问题,请尝试将对象作为 Map 处理(即,将“nameFirst”->“joe”等添加到哈希映射并使用它)。 绝对有效

标签: java freemarker camelcasing


【解决方案1】:

您的代码应该可以工作。当然nameFirstnull,因此就 FreeMarker 而言,它被视为缺失。

【讨论】:

  • 感谢您的回答!不幸的是 nameFirst 不为空。当我更改变量的名称和 getter/setter(即 getName_first)时,一切都按预期工作。我玩过不同的选项,看起来问题始终是大写的......其他想法?
【解决方案2】:

好的,问题解决了!

我们从 JSON 代码填充记录,这意味着 JSON 试图根据 JSON 表示法(大写、小写等)中定义属性的方式使用 setter。 由于设置器名称不符合 JSON 名称(即 setNameFirst 作为设置器名称与 JSON 中的 name_first),因此对象未初始化并且 FreeMarker 发出错误。

当我没有看到任何错误时,我在 getter 中设置了一个硬编码值以消除对象为 null 的选项 - 它让我找到了解决方案。

感谢收听 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-23
    • 1970-01-01
    • 1970-01-01
    • 2013-07-16
    • 1970-01-01
    • 1970-01-01
    • 2016-10-28
    • 2020-12-06
    相关资源
    最近更新 更多