Freemarker的“ .vars”名称不能包含破折号吗?
|
我们正在使用Freemarker 2.3.16版,而我刚刚在其中一个应用程序中找到了一个奇怪的错误。直到现在,我们的某些产品代码字符串中都有连字符。这些代码用于使用“ 0”从全局范围提取本地化文本的哈希。
减少问题使我举了一个任何人都可以尝试的示例:
模板中的
${.vars[\"foo-bar\"]}
输出0
${.vars[\"foo+bar\"]}
输出nullnull
“ 5”正确触发了InvalidReferenceException
这三个都应触发异常。而是显示正在评估“ 0”参数字符串! :-(
http://freemarker.sourceforge.net/docs/app_faq.html#faq_strange_variable_name表示这应该可行。
几周前,我在Freemarker邮件列表上看到类似问题的提法,建议在参数字符串前加上\“ @ \”作为前缀。这可能适用于其他哈希,但不适用于.vars
。我只是举了一个有效的示例(.vars[\"resources_title\"]
),对其进行了更改,使其引发了InvalidReferenceException(.vars[\"@resources_title\"]
)。我也在带连接符的引用上进行了尝试,它也引发了异常。
升级到2.3.18似乎没有什么不同。
没有找到相关结果
已邀请:
4 个回复
吐兄
凰葱崎济邯
表达式的地方
(第1088行)将控制权交给\“ rootDataModel \”,Struts小组将其硬连线为
的实例 该类的第70行(使用Struts版本2.1.8.1)调用\“ stack.findValue \”; \“ stack \”已被连线为ѭ17的实例 在第236行,该类依次询问
的实例以找到对象,在该位置假定名称为OGNL表达式并进行了解析,将\“ foo-bar \”转换为(foo-bar) 在此过程中,似乎始终没有选择不将
名称视为表达式(
中的注释暗示了这种可能性,但代码并未通过)。从理论上讲,我可以使
的实现创建
的变体,但是要花费很多工作才能更改所有相关的类。 (似乎也没有一种在OGNL表达式中转义\“-\”字符的方法。似乎在5-6年前就已经进行了讨论,但是......23ѭ未能在\之后找到\“-\” “ \\\”,所以想必\“-\”不可逃脱吗?) :-( 我尚不清楚将ѭ0名称当作表达式使用的用例是什么...但是我不认为Struts现在会改变。我没有重写六个Struts类,而是更改了将ResourceBundles装入值堆栈的代码:现在,它更改名称以替换\“-\”和\“ _ \”,同样,我的
名称也被更改为模板中的方式也一样。有用。 W
藕挝
郡晒景沧
如果我将freemarker更改为2.3.22版,则可以使用。