8

我正在将一个非常旧的应用程序(目前在 CF8 中运行)迁移到 Lucee。但是我遇到了一个似乎是某种自定义标签的问题。

我试图确保 IIS 中的所有虚拟目录对于旧安装和新安装都是相同的。并确保 CFIDE 和 Lucee Admin 中的映射和自定义标签路径相同。

但我收到了这个错误。并且无法弄清楚这cflink是如何实例化的。

在此处输入图像描述

在此处输入图像描述

我在 utils.cfc 文件的第 300 行找到了错误代码的位置 在此处输入图像描述

我已经很长时间没有使用自定义标签了,但我认为它们通常是用下划线调用的,并且代码应该更像<cf_link pageid="#LinkPageID#" Init="start">是被称为自定义标签。

如果我转到正在运行此应用程序的当前 CF 服务器,我可以发现已从 在此处输入图像描述 名为“tags”的目录中名为 cflink.cfm 的文件创建了一个 cfclass 文件,即使“标签”似乎没有映射目录也未在管理员的“自定义标签路径”下列出。

这个应用程序始于 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>

在tags\cflink.cfm里面的代码中也有对cflink的引用

<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 年写的,但我有点怀疑

添加搜索的屏幕截图

在此处输入图像描述 在此处输入图像描述

4

1 回答 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 年后才找到的人来说有点婊子

于 2015-12-11T20:44:42.283 回答