自定义标签和cfimport

时间:2009-06-24 14:09:39

标签: coldfusion cfimport

自定义标签是否适用于映射? 我试图不必将CustomTags文件夹作为相对地址。

我试过了:

<cfset this.mappings["/CT"] = Expandpath("/myProjects/Project1/CustomTags")>

在Application.cfc中,然后

<cfimport prefix="tag" taglib="/CT">

在我的页面内部,但它没有。

它说:

无法导入/ CT指定的标记库。 遇到以下错误:C:\ Inetpub \ wwwroot \ CT。确保您已指定有效的标记库。

5 个答案:

答案 0 :(得分:2)

与Jayson报道的情况相反 - 我的CFIMPORT工作正常,每个应用程序映射与CFAdmin中的全局设置映射完全相同。 CFIMPORT对于映射非常不稳定(例如,你不能将变量用于relativepath,也不能使用expandpath) - 但是你应该能够做你没有问题的请求。

您是否在CFAdmin |中选中了“启用每个应用程序设置”设置允许你使用this.mappings?你在运行什么版本的CF?我正在使用带有此代码的CF8并且没有问题:

应用程序CFC(在函数外部但在组件中):

this.rootPath = getDirectoryFromPath(getCurrentTemplatePath());  // this assures path of application.cfc is used to determine path, likely equivalent to expandPath("/")
structInsert(this.mappings, '/vp', this.rootPath);

在CFC中(在函数外部但在组件中):

<cfimport prefix="loader" taglib="/vp/view/_loader/">

然后我可以在CFC中使用它并按预期工作。

答案 1 :(得分:1)

我很确定你不能用cfimport标签做任何事情。我认为你必须使用相对路径,你必须在每个页面上手动包含它。 (与将其放在application.cfc文件中某处或其他任何内容)

答案 2 :(得分:1)

文档说它适用于Administrator ColdFusion映射页面中指定的目录。您是否尝试在ColdFusion管理员中设置映射以查看它是否先工作?如果可行,但application.cfc中每个应用程序设置的this.mappings不起作用,那么可能是一个bug?!

修改 我测试了Adam的建议使用expandPath()函数,但这也不起作用,因为taglib属性必须包含常量值。它不能包含变量或函数。除非您在ColdFusion Administrator中使用映射集,否则它根本不起作用。我使用这个application.cfc尝试了以下测试。

<cfcomponent>

    <cfset this.name = "TestApp" />
    <cfset this.loginStorage = "session" />
    <cfset this.sessionManagement = true />
    <cfset this.setClientCookies = true />
    <cfset this.setDomainCookies = false />
    <cfset this.sessionTimeOut = CreateTimeSpan(0,12,0,0) />
    <cfset this.applicationTimeOut = CreateTimeSpan(1,0,0,0) />
    <cfset this.mappings['/CT'] = "C:\apache\htdocs\myProjects\Project1\CustomTags"/>

</cfcomponent>

这是在ColdFusion模板中:

<cfimport prefix="tag" taglib="#expandpath('/CT')#">

引发错误:

  

此表达式必须具有常量   值。

<cfset CT = expandpath('/CT')/>
<cfimport prefix="tag" taglib="#CT#">

引发错误:

  

此表达式必须具有常量   值。

答案 3 :(得分:1)

我很确定expandPath尊重CF映射。你尝试过这样的事吗?

<cfset this.mappings["/CT"] = Expandpath("/myProjects/Project1/CustomTags")>

<cfimport prefix="tag" taglib="#expandPath('/CT')#">

答案 4 :(得分:1)

我已经确认了...你不能使用通过application.cfc中的“this.mappings”结构创建的映射。

来自Adobe的文档(Coldfusion 9):

  

路径必须相对于网络   root(并以/开头),当前   页面位置或目录   在管理员中指定   ColdFusion映射页面。

CFImport Documentation for CF 9

不确定为什么application.cfc映射可以用于除此之外的所有其他内容。有点令人失望,因为我喜欢在管理员中尽可能少地定义的想法。我喜欢将应用程序压缩并在任何地方部署。