如何在 coldFusion 应用程序中找到自定义标签实例化
How do I locate a custom tag instantiation in a coldFusion App
我正在将一个非常旧的应用程序(目前 运行 在 CF8 中)迁移到 Lucee。但是我 运行 遇到了一个问题,似乎是某种自定义标签。
我已尝试确保新旧安装的 IIS 中的所有虚拟目录都相同。并确保 CFIDE 和 Lucee Admin 中的映射和自定义标记路径相同。
但是我收到了这个错误。并且无法弄清楚这个 cflink
是如何被实例化的。
我在 utils.cfc 文件的第 300 行找到了错误代码的位置
我已经很久没有使用自定义标签了,但我认为它们通常是用下划线调用的,如果将其作为自定义标签调用,代码应该更像 <cf_link pageid="#LinkPageID#" Init="start">
。
如果我转到 运行 这个应用程序的当前 CF 服务器,我会发现已经创建了一个 cfclass 文件
来自名为 "tags" 的目录中名为 cflink.cfm 的文件,即使 "tags" 目录似乎没有映射,也没有在管理员的 "custom tags paths" 下列出。
这个应用程序是在 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的引用tags\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 年写的,但我有点怀疑它
添加搜索的屏幕截图
如果其他人遇到这个问题。在 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 年后才发现的人来说有点糟糕
我正在将一个非常旧的应用程序(目前 运行 在 CF8 中)迁移到 Lucee。但是我 运行 遇到了一个问题,似乎是某种自定义标签。
我已尝试确保新旧安装的 IIS 中的所有虚拟目录都相同。并确保 CFIDE 和 Lucee Admin 中的映射和自定义标记路径相同。
但是我收到了这个错误。并且无法弄清楚这个 cflink
是如何被实例化的。
我在 utils.cfc 文件的第 300 行找到了错误代码的位置
我已经很久没有使用自定义标签了,但我认为它们通常是用下划线调用的,如果将其作为自定义标签调用,代码应该更像 <cf_link pageid="#LinkPageID#" Init="start">
。
如果我转到 运行 这个应用程序的当前 CF 服务器,我会发现已经创建了一个 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>
里面的代码中也有对cflink的引用tags\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 年写的,但我有点怀疑它
添加搜索的屏幕截图
如果其他人遇到这个问题。在 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 年后才发现的人来说有点糟糕