有没有办法在处理ORM对象时将top属性全局应用于cfdump / writeDump?

时间:2013-08-05 10:06:00

标签: orm coldfusion cfml cfdump

在处理嵌套的ORM关系时,使用cfdumpwriteDump可能会导致java.lang.OutOfMemoryError错误,因为CF会尝试解析嵌套对象中的关系并转储太多对象。

使用top属性可以避免这种情况,例如:<cfdump var=#SomeObject# top=3 />

记住要记住这一点是一件痛苦的事情 - 在处理ORM对象时,有没有办法配置CF不会降低太多级别?

1 个答案:

答案 0 :(得分:5)

似乎没有任何管理员设置。 (issue raised

一个不完美的解决方案是通过将{cfusion}/wwwroot/WEB-INF/cftags/dump.cfm重命名为(例如)origdump.cfm然后创建一个包含以下内容的新dump.cfm文件来为cfdump标记创建一个包装器。

<cfif isObject(attributes.var) AND NOT StructKeyExists(attributes,'top')>
    <cfset attributes.top = 3 />
</cfif>

<cforigdump attributecollection=#attributes# />

<cfexit method="exitTag" />

幸运的是,writeDump函数将调用此包装器(因此它适用于标记和函数)。

不幸的是,包装器不是递归调用的 - 如果ORM对象在结构或数组中,那么原始问题仍然表现出来 - 可能预先扫描复杂变量以确定内部是否存在关系并设置适当的最高值,但只有一个有限的解决方案可以实现(即它会影响相邻的结构/数组)。