好吧,我遇到了与此处讨论的相同的错误:
Coldfusion 10 File Not Found Error
我在笔记本电脑上使用Coldfusion 11,开发人员版,Windows 8.1 Pro(操作系统)。
人们已经建议采用两种方法来解决这个问题:
1)在CFAdmin中设置缺失模板
2)在Application.cfc中设置onMissingTemplate函数
我基本上不确定任何方法,但是,我想采用第一种方法。谁能告诉我如何在CFadmin中设置丢失的模板?
答案 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。
- 在ColdFusion管理员中,单击“设置”以查看“服务器设置”页面
- 指定ColdFusion用于查找错误处理模板的绝对路径
醇>