【问题标题】:Custom Tags and cfimport自定义标签和 cfimport
【发布时间】:2009-06-24 14:09:39
【问题描述】:

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

我试过了:

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

Application.cfc 内部,然后

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

在我的页面内,但不是。

上面写着:

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

【问题讨论】:

    标签: coldfusion cfimport


    【解决方案1】:

    与 Jayson 报告的相反 - 我让 CFIMPORT 工作得很好,每个应用程序映射与 CFAdmin 中的全局设置相比。 CFIMPORT 对映射非常古怪(例如,您不能将变量用于相对路径,也不能使用扩展路径) - 但您应该能够做您所要求的事情,而不会出现问题。

    您是否在 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 中使用它,它按预期工作。

    【讨论】:

    • 它没有用,但没关系。我将使用相对寻址来引用我的自定义标签。 application.cfc stmts 工作,但 cfimport 失败。
    • 确保在使用每个应用映射时,您在 CFAdmin 中没有任何同名的全局映射。在上述情况下,请确保从 CFAdmin Mappings 中删除“/vp”,以确保 CF 使用 per-app one 映射而不是全局映射。
    【解决方案2】:

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

    编辑: 我测试了 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】:

      我很确定你不能用 cfimport 标签做任何花哨的事情。我认为您必须使用相对路径,并且必须在每个页面上手动包含它。 (而不是将其放在 application.cfc 文件中的某个地方或其他地方)

      【讨论】:

      • This.mappings 需要在 Application.cfc 的顶部,并且 cfimport 需要在页面上。我已经成功地将 This.mappings 与 cfinclude 一起使用,但不是 cfimport。
      【解决方案4】:

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

      <cfset this.mappings["/CT"] = Expandpath("/myProjects/Project1/CustomTags")>
      
      <cfimport prefix="tag" taglib="#expandPath('/CT')#">
      

      【讨论】:

        【解决方案5】:

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

        来自 Adob​​e 的文档(Coldfusion 9):

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

        CFImport Documentation for CF 9

        不知道为什么 application.cfc 映射适用于除此之外的所有其他东西。有点令人失望,因为我喜欢在 Administrator 中尽可能少地定义的想法。我喜欢只是压缩一个应用程序并将其部署到任何地方。

        【讨论】:

        • 感谢史蒂夫的评论!欢迎使用 stackoverflow!
        猜你喜欢
        • 1970-01-01
        • 2013-01-05
        • 1970-01-01
        • 1970-01-01
        • 2011-03-03
        • 2018-07-26
        • 2011-06-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多