关闭cfpdf标记并导致错误

时间:2011-08-26 13:20:28

标签: coldfusion coldfusion-8 cfeclipse cfpdf

如果我在组件中使用以下代码:

<cfpdf action="merge" name="tender">
</cfpdf>

我收到以下错误:

  

结束标记''与当前父项不匹配:   'cffunction'

但是,如果我将代码更改为:

<cfpdf action="merge" name="tender" />

我没有错误。请注意,我更改代码的唯一方法是关闭标记的方式。任何人都可以向我解释为什么会这样,甚至更好,告诉我如何解决这个问题?

错误在“问题”视图中显示在CFEclipse中,但是当我在服务器上运行代码时不会发生错误。

系统设置: Win7,使用CFEclipse v.1.4.3运行Eclipse Indigo。服务器运行Coldfusion 8。

更新1:

如果我只是忽略CFEclipse显示的解析错误并在服务器上运行代码,它就会按预期工作。我想这表明它确实与CFEclipse本身一样,就像Peter Boughton所建议的那样,而不是代码本身的问题。

以防万一,这里是该函数的完整代码(请注意,这不是生产代码,我目前只是为了获得我需要的工作而进行测试):

<cffunction name="GetTenderPDF" access="remote">
        <cfargument name="Info" type="String" required="true" />

        <cfset var Tender = {} />
        <cfset var InfoJson = URLDecode(Arguments.Info) />

        <cfif Not IsJSON(InfoJson)>
            <cfreturn Error(Messages.NOT_JSON) />
        </cfif>

        <cfset Tender = DeserializeJSON(InfoJson) />
        <cfset templatePath = "templates/tenderTemplate_"&Tender.GROUP&".cfm" />

        <cfheader name="Content-Disposition" value="attachment; filename=offert.pdf" />

        <cfdocument format="pdf" name="mydocument">

        <cfloop index="x" from="1" to="15">
              <p>
              lorem upsom doloras paris hilton is my hero loreum ipsom dsoio foom an to dht end of the world
              will anyone actually read this probably not but let me put more realtext in so it flows a bit nicely
                  <cfloop index="y" from="1" to="#randRange(1,9)#">This sentence will appear a random amount of time.</cfloop>
              </p>
            </cfloop>

        </cfdocument>
        <cfdocument format="pdf" name="base">
            <cfinclude template="#templatePath#" />
        </cfdocument>

        <!--- <cfpdf action="merge" name="tender" /> --->
        <cfpdf action="merge" name="tender">
            <cfpdfparam source="base" />
            <cfpdfparam source="mydocument" />
        </cfpdf>

        <cfcontent type="application/pdf" reset="true" variable="#toBinary(tender)#" /> 

    </cffunction>

2 个答案:

答案 0 :(得分:2)

这听起来像是CFEclipse字典文件中的一个错误。

如果您可以确认第一个代码实际在CF8上运行,那么您可以report it as a CFE bug,并且有人可以帮您解决问题。

自行解决问题......

  1. 找到您的eclipse插件目录(例如/usr/lib/eclipse/pluginsc:/program files/eclipse/plugins或任何地方)。

  2. 在你的插件里面找到org.cfeclipse.cfml目录(它可能在名字后面有一个时间戳,这取决于你的版本,但应该只有一个*),里面有一个dictionary文件夹,包含一堆XML文件 (*如果有多个版本,请选择最新版本 - 即最高编号。)

  3. 您需要cf8.xmlcf9.xml - 取决于您为项目配置的项目(要检查,在CFE导航器中,右键单击项目,选择属性,然后cfeclipse ,并查看选择了哪个单选项) - 首先创建文件的备份,然后使用任何text / xml编辑器打开它。

  4. 搜索name="cfpdf" - 应该只出现一次 - 在同一个标​​记中,您应该看到属性single="true" - 将其更改为single="false"并保存文件。

  5. 重新启动CFEclipse,并且 - 如果我没有搞砸这些说明 - 那么错误信息应该已经消失。 :)

  6. 我还没有测试过这个(在这台机器上没有CFE),但是只要你在编辑之前备份字典文件就不应该有任何问题。

答案 1 :(得分:0)

这可能与周围的代码或<cfpdf></cfpdf>标记内的代码有关。你能展示更多背景吗?