Lucee从5.3.2升级至5.3.8后lsDateFormat函数无法识别问题求助
Lucee 5.3.3+版本lsDateFormat()成员函数调用异常说明
根因分析
- Lucee 5.3.3版本对成员函数的类型校验逻辑做了未公开的隐性调整:5.3.2及更早版本中,当变量为符合日期格式的字符串时,调用
lsDateFormat()成员函数会触发隐式类型转换,自动将字符串转为日期对象后执行方法,仅需要传格式参数即可正常运行。 - 5.3.3及后续版本收紧了成员函数的类型匹配规则,取消了该场景下的自动类型转换,只会在变量的原生类型下查找匹配方法,字符串类型本身无
lsDateFormat方法,因此抛出对应报错:
The function [lsDateFormat] does not exist in the String, but there is a similar function with name [listItemTrim] available.
免全量改代码的解决方案
- 全局兼容方案:登录Lucee管理员后台,进入
Settings > Compatibility页面,将「Member Function Type Coercion」选项设置为Legacy (5.3.2 and older),保存后重启Lucee服务即可兼容所有旧写法,无需修改业务代码。 - 单应用兼容方案:无需修改全局配置,在应用的
Application.cfc文件中添加配置项this.memberFunctionTypeCoercion = "legacy";,仅对当前应用生效兼容规则。 - 单页面兼容方案:如果仅部分页面用到旧写法,可在对应页面顶部添加
<cfscript>settings.memberFunctionTypeCoercion="legacy";</cfscript>,仅对当前页面生效。
内容的提问来源于stack exchange,提问作者matcha-tea
相关产品推荐
相关产品推荐

