即使文件存在,CF11中也找不到文件

时间:2015-02-14 05:31:42

标签: coldfusion coldfusion-11

好吧,我遇到了与此处讨论的相同的错误:

Coldfusion 10 File Not Found Error

我在笔记本电脑上使用Coldfusion 11,开发人员版,Windows 8.1 Pro(操作系统)。

人们已经建议采用两种方法来解决这个问题:

1)在CFAdmin中设置缺失模板

2)在Application.cfc中设置onMissingTemplate函数

我基本上不确定任何方法,但是,我想采用第一种方法。谁能告诉我如何在CFadmin中设置丢失的模板?

1 个答案:

答案 0 :(得分:2)

为什么您更喜欢让服务器处理丢失的模板?我自己,我喜欢在每个应用程序的基础上处理它。某些应用程序永远不应该有链接导致不存在的文件,其他应用程序可能会将其作为其核心的一部分进行操作。

直接来自adobe's docs,你可以使用(我不小心从cf8文档中提取了这些信息,但链接是当前的文档,结果基本相同。

<cffunction name="onMissingTemplate" returnType="boolean">
    <cfargument type="string" name="targetPage" required=true/>
    ...
    <cfreturn BooleanValue />
</cffunction>

对于我的一些项目,我编写了一个CMS(内容管理系统),以时尚的方式存储数据库中的所有内容。

CMSPages
------------
PID PTitle PFile       PContent
1   Home   /index.cfm  <b>Hey!</b> Welcome to our gollygizmo website.

然后我(我的真实代码实际上使用cfincludes而不是直接在文档中。你可以这样做,但我最简单的方法是使用内联代码进行演示。)

<cffunction name="onMissingTemplate" returnType="boolean">
  <cfargument type="string" name="targetPage" required=true/>
  <cftry>
    <cfquery name="FindPage">
        select * from CMSPages
         where pFile = <cfqueryparam cfsqltype="nvarchar" value="#Arguments.targetPage#">
    </cfquery>
    <cfif FindPage.recordcount eq 1>
       <cfoutput query="FindPage">show page stuffs</cfoutput>
       <cfreturn true>
    <cfelse>
       <!--- Page not found, log some stuff or email stuff
          include cgi data so you know where the link came from --->
       Hey, this page doesn't exist, sorry about that.
       <cfreturn true>
    </cfif>
    <cfcatch>
      <!--- Something went wrong, log/email error info and --->
      <cfreturn false>
      <!--- We return false here to pass it back to the default error handler, which can be a handler set in cfadmin. --->
    </cfcatch>
  </cftry>
</cffunction>

在这种情况下,基于查询名称缓存查询可能是有益的,您可以执行类似

的操作
<cfquery name="local.FindPage#hash(arguments.targetpage)#" cachedWithin="...">
  ...
</cfquery>

<cfset request.FindPage=local["Findpage#hash(arguments.targetpage)#"]>

这样查询就会被唯一的名称缓存,即使它可以通过一个通用名称在文档中轻松访问。

但是,如果您仍然偏好以服务器为中心的丢失模板处理,则只需搜索cold fusion admin missing template即可为您here

  
      
  1. 在ColdFusion管理员中,单击“设置”以查看“服务器设置”页面
  2.   
  3. 指定ColdFusion用于查找错误处理模板的绝对路径
  4.