处理嵌套的 ORM 关系时,使用 cfdump或 writeDump可以迅速导致 java.lang.OutOfMemoryError
错误是因为 CF 尝试解决嵌套对象中的关系并转储太多对象。
这可以通过 top
避免属性,例如:<cfdump var=#SomeObject# top=3 />
记住一直写这个很痛苦 - 有没有办法配置 CF 在处理 ORM 对象时不会下降太多级别?
最佳答案
似乎没有任何管理员设置。 ( issue raised )
一个不完美的解决方案是通过重命名 {cfusion}/wwwroot/WEB-INF/cftags/dump.cfm
来为 cfdump 标签创建一个包装器。到(例如)origdump.cfm
然后创建一个新的 dump.cfm
文件包含:
<cfif isObject(attributes.var) AND NOT StructKeyExists(attributes,'top')>
<cfset attributes.top = 3 />
</cfif>
<cforigdump attributecollection=#attributes# />
<cfexit method="exitTag" />
幸运的是,writeDump 函数会调用这个包装器(所以它适用于标签和函数)。
不幸的是,包装器不是递归调用的——如果 ORM 对象在结构体或数组中,那么原始问题仍然表现出来——有可能预扫描复杂变量以确定内部是否存在关系并设置适当的最高值,但这只能实现有限的解决方案(即它会影响相邻的结构/数组)。
关于orm - 有没有办法在处理 ORM 对象时将 top 属性全局应用于 cfdump/writeDump?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18055475/