我在我的cfm中有这个代码,它有效
我已将它放入cfc以分离我的逻辑和我的观点,我试图使它更通用
而我的新cfm
...
它失败了,我收到此错误消息
CFML编译器遇到意外的coldfusion.compiler.CompilerInternalException异常.原因是:无法完成CFML到Java的翻译.发生在:
...
错误发生在C:\ path\to\document\root\cfc\ArrayManager.cfc:第21行
从C:\ path \调用到\ document\root\cfc\update-emp.cfm:第66行
从C调用:\C:\ path\to\document\root\cfc\update-emp.cfm:第66行19 : 21 : 23`:
:
20:
22
我做错了什么或有更好的方法来完成我想要做的事情(在表中显示数据库内容并通过同一个表更新(更新和删除)数据库内容)
您发布的错误消息表明您滥用了评估功能.根据文档,它的工作原理如下:
从左到右动态评估一个或多个字符串表达式.(左侧的评估结果可能在右侧的表达式中有意义.)返回评估最右侧表达式的结果.
但是你也遇到了其他问题.对于初学者,当您将代码移动到CFC时,您没有正确复制逻辑.
在您的工作代码中,您使用条件:
但是在你的CFC中你有:
这应该是:
接下来,您没有使用最佳语法进行评估,您可能根本不想使用它.该声明:
y = evaluate(0,key)
可以改写为:
y = evaluate(key)
由于key的值是"UPD_something",因此可以将其重写为:
y = [variables|arguments|etc].UPD_Something
(由于您没有明确指定变量作用域,因此CF将尝试按特定顺序在一组作用域中查找变量;这就是我使用语法[a | b | ...]的原因)
你可能不是这个意思,你可能想要表格中的值.由于密钥名称是动态的,因此您应该以这种方式访问它(而不是使用evaluate
):
y = variables.instance.form[key]
我想这可能会解决它.所以,总结一下:
更换你的发言
与
(并确保你传递的"structString"的值包括下划线!)
替换您的使用evaluate
:y = variables.instance.form[key]
我希望能解决你的问题......
让它工作后,开始考虑你的变量名称."Array"是一个可怕的变量名,因为它实际上是CFML中的保留字.并且使用"x"和"y"根本不是描述性的.这些类型的问题使得这个问题难以回答.