首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以在this.customTagPaths ()中设置onApplicationStart吗?

问我可以在this.customTagPaths ()中设置onApplicationStart吗?
EN

Stack Overflow用户
提问于 2015-04-07 17:47:10
回答 2查看 567关注 0票数 2

我试图根据配置页面上的一个值动态地在application.cfc上设置application.cfc变量。这是因为我的开发工具上的customTagPaths与在活动站点上的不同,而且我不想每次部署到活动站点时都更改这个值。我也不能通过活动站点上的CF管理设置自定义标记路径,因为我不控制活动CF服务器。如果在onApplicationStart()中设置该值,则无法识别该值:

代码语言:javascript
复制
<cffunction name="OnApplicationStart"...

    <!---application.customTagPaths is set on the config page. On dev, this value is "C:/Inetpub/wwwroot/mySite/components/"--->
    <cfinclude template = config/appsettings.cfm">
    <cfset this.customTagPaths = application.customTagPaths>

使用上面的代码,当我试图在cfm页面上实例化一个对象时,我会得到一个“无法找到组件”错误:

代码语言:javascript
复制
<cfset session.user = createObject("component", "user").init()>

因此,我想我的问题的答案是“不”。我认为这是因为onApplicationStart()中的" this“作用域是函数的本地作用域,而不是用于设置this.name和this.applicationTimeout等的"this”作用域。我可以在appsettings.cfm页面的顶部完成application.cfc的cfinclude,并在其下面设置this.customTagPaths:

代码语言:javascript
复制
<cfcomponent>
     <cfinclude template="config/appsettings.cfm">
     <cfset this.Name="myApp">
     <cfset this.customTagPaths = application.customTagPaths>
     ...

这是可行的,但这是理想吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-07 18:59:09

你最初的问题的答案是否定的,正如你所发现的。

对后一个问题的回答是肯定的,这正是你应该怎么做的。但您将不使用应用程序范围引用。这些应用程序设置实际上并不存储在应用程序范围中。

对于可能会遇到这个问题的其他人,为了在Application.cfc文件中使用每个应用程序设置,您必须首先在ColdFusion管理员的设置页面上启用每个应用程序设置。然后在Application.cfc文件中设置映射或自定义标记路径,如下所示。

指定每个应用程序设置的文档参考

每个应用程序设置中的自定义标记覆盖在ColdFusion管理员中定义的标记。例如,如果您有两个同名的自定义标记,并且它们位于Administrator和每个应用程序设置中的不同位置,则首先选择每个应用程序设置中的一个。 注意:仅在使用Application.cfc文件的应用程序中支持每个应用程序设置,而在使用Application.cfm文件的应用程序中则不支持。如果在“管理员”的“内存变量”页面中禁用了应用程序变量,则每个应用程序设置不起作用。 设置每个应用程序的自定义标记路径

  1. 检查ColdFusion管理员的“设置”页上的“启用每个应用程序设置”选项。
  2. 在Application.cfc文件中包括如下代码:

<cfset customtagpaths = "c:\mapped1,c:\mapped2">

<cfset customtagpaths = ListAppend(customtagpaths,"c:\mapped3")>

<cfset This.customtagpaths = customtagpaths>

票数 2
EN

Stack Overflow用户

发布于 2015-04-07 19:18:35

好吧,我知道问题出在哪里了。在我的onRequestStart()函数中,我有一个if块来重置应用程序:

代码语言:javascript
复制
<cffunction name="OnRequestStart" access="public" returntype="boolean" output="false" hint="Fires at first part of page processing.">
        <cfargument name="template" type="string" required="true" />

        <cfsetting requesttimeout="20" showdebugoutput="#THIS.showDebug#" enablecfoutputonly="false" />
        <cfset request.dsn = application.dsn>

        <!---ability to restart app without restarting the CF server--->

        <cfif THIS.mode EQ "dev" AND structKeyExists(url, "$$resetApp$$") AND url.$$resetapp$$ EQ 1>
            <cfset structClear(application)>
            <cfset structClear(this)>
            <cfset onApplicationStart()>
        </cfif>

我设置的这个作用域vars在if块之前是可用的,但是由于我正在清除这个作用域和应用程序作用域,这些vars将在if块之后被删除和不可用。所以我所做的是: 1.将配置文件的cfinclude放在页面的顶部。2.在该文件中设置我的“此”vars。因为它是一个包含,所以本质上就像它的代码在application.cfc上一样,所以不需要在其中设置任何应用程序范围vars。这解决了我的customTagPaths问题。3.任何我想在此范围内使用站点的内容(比如this.dsn),都要将其保存为页面顶部的应用程序范围var。4.在onRequestStart()中,请在if块之前引用this.showDebug和application.dsn,这将清除此作用域和应用程序范围。

直观地说,我更喜欢在onApplicationStart()中设置onApplicationStart,所以它只设置了一次(当应用程序启动时),但这不起作用;显然,函数在页面顶部的任何一个范围vars设置好之前就会触发。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29497856

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档