如何在 ColdFusion 应用程序中定位自定义标记的实例化

8
我正在将一个非常古老的应用程序(目前在CF8中运行)迁移到Lucee。但是我遇到了一个问题,似乎是某种自定义标签。
我已经尝试确保IIS中的所有虚拟目录对于旧版和新版安装都相同。并确保CFIDE和Lucee Admin中的映射和自定义标签路径相同。
但是我收到了这个错误。而且无法弄清楚如何实例化这个。

enter image description here

enter image description here

我已经找到错误代码的位置,位于utils.cfc文件的第300行 enter image description here 我很久没有使用自定义标签了,但是我认为它们通常会用下划线调用,代码应该更像这样<cf_link pageid="#LinkPageID#" Init="start">如果这被称为自定义标签。
如果我去运行此应用程序的当前CF服务器,我可以找到一个cfclass文件已经被创建 enter image description here 来自名为cflink.cfm的文件夹中的“tags”目录,尽管似乎没有为“tags”目录映射,并且在管理员中也没有列出“自定义标签路径”。
这个应用程序始于2003年,可以想象已经成长为一堆混杂的代码,没有人知道如何实例化这个标签。

你有没有在遗留代码方面的经验?你认为我应该去哪里寻找其他想法来让它能够运行?目前只有一个生产环境,如果我能让它在Lucee上运行,不仅会成为10年来从未存在过的开发环境,而且还是继续展示Lucee作为一个优秀的CFML引擎的好方法。

补充信息

Leigh问过init是否可能是jar引用,但在cflink.cfm文件中,我看到了这段代码:

    <cfif Attributes.Init IS "start">
        <cfset Request.PageID = Attributes.PageID>
        <cfset Request.Page_Width = Variables.qParentInfo.Page_Width>
        <cfset Request.Page_Height = Variables.qParentInfo.Page_Height>
        <cfset Request.Page_TypeID = Variables.qParentInfo.Page_TypeID>
        <cfset Request.AddPath = "">
        <cfif IsDefined("Attributes.Anchor")>
            <cfset Request.Anchor = Attributes.Anchor>
        <cfelse>
            <cfset Request.Anchor = "">
        </cfif>
        <cfset Request.IsInternalLink = false>
        <cfexit method="EXITTAG">
    </cfif>

代码中还有对cflink的引用,位于标签\cflink.cfm内部。

<cfif Len(Variables.qParentInfo.ParentID) GT 0>
    <!--- Add the page title to the end of the path --->
    <cfset Request.AddPath =  ReplaceNoCase(Variables.qParentInfo.Nav_Title," ","_","ALL") & "/" & Request.AddPath>
    <cflink init="working" pageid="#Variables.qParentInfo.ParentID#" popcode="#Attributes.popcode#">
<cfelse> ......</cfif>

尽管这可能是递归,但考虑到它是在2004年编写的,我有点怀疑。
添加搜索截图。

enter image description here enter image description here


1
翻译:可能有点蒙,但是你有检查是否有任何cfimport调用吗?使用标签库可以做一些创意性的事情。 - Leigh
2
尝试在您的服务器上搜索“link.cfm”。它一定会出现在某个地方。 - James A Mohler
我对所有代码进行了全面搜索,应用程序中只有1个cfimport标记的实例,并且正在使用它来导入Ben Nadel的POI实用程序。因此,如果它没有被导入并且不能是自定义标记,因为没有下划线,并且它在cf8框上被转换为cfclass,那么这是如何发生的? - Lance
1
建议2:也许你需要寻找的不是cfm文件。也许他们有一些非cfm文件作为自定义标签。尝试在“cflink.*”上搜索。 - James A Mohler
1
老实说,我不确定。我从未听说过绕过命名限制的方法(至少不是使用标准CF代码),但不能完全排除这种可能性。如果您检查data\cflink.cfm文件的内容,是否可以推断出代码中使用了<cflink...>?也许没有。此外,虽然机会渺茫,但是..类路径或WEB-INF\lib中有自定义jar包吗? (编辑)詹姆斯 - 是的,只搜索对cflink的非标签引用是个好主意。名称“init”让我想知道它是否是某种java标签? - Leigh
显示剩余11条评论
1个回答

4
如果其他人遇到了这个问题。在CF8中以及之前的版本中,您可以将cfm文件放入ColdFusion8 \ wwwroot \ WEB-INF \ cftags 目录中,在这种情况下,该文件 ColdFusion8 \ wwwroot \ WEB-INF \ cftags \ link.cfm 然后像任何其他cftag一样运作。
我找到了最初在2004年构建此应用程序的人,并告诉我他们是以这种方式完成的,以避免输入下划线,如果按照自定义标记完成,他们会输入下划线。
我有点明白了,因为这个标记在应用程序中被随处使用,几乎有数百次。但是很难找到它。
现在我所要做的就是弄清楚如何以类似的方式将其移动到Lucee世界中。以便以相同的方式进行实例化。
感谢@Leigh的所有帮助,你总是太棒了!
添加更多信息
如果 WEB-INF \ lucee \ library \ tag 中有文件,则相应的Lucee目录是 WEB-INF \ lucee \ library \ tag 。这些文件在加载时读取,然后可以像任何其他cf标记一样使用。
例如,如果您有文件 WEB-INF \ lucee \ library \ tag \ link.cfm ,则可以通过`cflink'调用它。
看起来是个不错的想法,但是10年后发现有点困难。

1
哇...从来不知道你可以这样做!解决谜团的工作做得很好。你知道Lucee是否也允许这样吗?我似乎记得在Railo中可以创建没有下划线的“cf”标签,尽管方式不完全相同。由于此标签在应用程序中被广泛使用.. 嘿嘿,你难道不喜欢传统应用程序吗?;-) - Leigh
1
这就是我现在正在努力的。当我弄清楚了,我会在我的答案中发布它。再次感谢您的帮助。 - Lance
1
非常欢迎。我期待着它。(猜测,传统应用程序可能并不总是有趣的,但它们从来不会无聊)。 - Leigh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接