【问题标题】:ColdFusion Issue using OnError使用 OnError 的 ColdFusion 问题
【发布时间】:2014-02-27 10:48:15
【问题描述】:

我正在尝试用 onError 方法(在将替换 application.cfm 的 application.cfc 中)替换我的 cferror 标记(在 application.cfm 中)。 但我面临一个问题。
问题是:

对于onError,如果我试图显示一些用户友好的消息,它是 在发生错误的地方显示在html中。
例如,如果页脚发生异常,则消息 显示在网站的页脚和其他所有内容(html)上 该网站也会显示出来。
但是当我使用 cferror 标签时,如果 发生异常,则仅显示该模板 在 cferror 标记中指定。

所以,
有什么方法可以使 onError 与 cferror 标签一样工作吗?
(在显示用户友好消息的意义上)

谢谢。

【问题讨论】:

  • 那么你到底需要什么,需要显示显示消息的通用方式,甚至问题出现在任何地方,你可以尝试以下

标签: coldfusion coldfusion-9 coldfusion-10


【解决方案1】:

你所描述的有道理。输出缓冲区已经部分填充了客户端的响应。

在 application.cfc 中的 onError 方法中,您应该能够使用<cfcontent reset=true> 清空缓冲区,然后您可以发送任何您喜欢的响应。

【讨论】:

    【解决方案2】:

    把它放在你的 Application.cfc 中

    <cffunction name="onError" returnType="void" output="true">
        <cfargument name="exception" required="true">
        <cfargument name="eventname" type="string" required="true">
        <cfset var errortext = "">
        <cflog file="myapperrorlog" text="#arguments.exception.message#">
        <cfsavecontent variable="errortext">
        <cfoutput>
        An error occurred: http://#cgi.server_name##cgi.script_name#?#cgi.query_string#<br />
        Time: #dateFormat(now(), "short")# #timeFormat(now(), "short")#<br />
        <cfdump var="#arguments.exception#" label="Error">
        <cfdump var="#form#" label="Form">
        <cfdump var="#url#" label="URL">
        </cfoutput>
        </cfsavecontent>
        <cfmail to="emails@yourdomain.com" subject="Error: #arguments.exception.message#" attributeCollection="#request.mailDetails#">
            #errortext#
        </cfmail>
        <cflocation url="errors.cfm">
    </cffunction>
    

    创建一个通用的 errors.cfm 页面,您可以在其中向用户显示一些自定义消息,您可以添加任何您想要显示给用户的消息,在邮件中,您可以添加自己的电子邮件,这样每次出现错误时出现,您将收到一封电子邮件。

    【讨论】:

    • 不能使用cflocation,因为它会改变url。希望它与 cferror 标记相同。
    • 您好,如果您使用 cferror,您需要使用 Adob​​e 文档中的模板:&lt;cferror template = "template path" type = "exception|validation|request" exception = "exception type" mailTo = "e-mail address"&gt;。所以在 onError 方法中,你可以或不能指定模板,它是你的选择,所以显然如果没有指定模板,它会在遇到的地方显示错误,因为这是它的默认工作方式
    • 我正在使用 cfinclude 在 onError 中指定模板。因此,它显示了遇到错误的位置。但我希望它像 CfError 标签一样工作。因此它将删除页面上的所有内容,并且仅显示该特定模板。是否可以使用 cfError?
    • 你的意思是说你需要使用error.diagnotics,cferror中提供的错误范围字段
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-02
    • 2014-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多