【问题标题】:cfchart displaying white spacescfchart 显示空格
【发布时间】:2013-07-02 21:30:29
【问题描述】:

我正在计算特定问题的响应,并希望通过图表显示其响应计数。我正在使用此代码来计算响应。

<cfquery name="questions">
                        SELECT
                              questions.id,
                              questions.question as question,
                              questiontypes.name as questiontype,
                              questiontypes.template as template,
                              surveys.name as surveysname
                        FROM
                              questions
                        LEFT JOIN answers ON questions.id = answers.fkquestionid
                        INNER JOIN questiontypes ON questions.fkquestiontypeid = questiontypes.id
                        INNER JOIN surveys ON questions.fksurveyid = surveys.id 
                        WHERE fksurveyid = <cfqueryparam cfsqltype="cf_sql_integer" value="#arguments.surveyid#">
             </cfquery>
             <cfset response.question = questions> 

              <cfloop query="questions">
                   <cfswitch expression ="#questions.template#"> 
                       <cfcase value="truefalse"> 
                           <cfquery name="gettotaltruefalse">
                                 SELECT COUNT( IF(result.truefalse = 1,1,NULL )) AS totaltrue, 
                                        COUNT( IF(result.truefalse = 0,0,NULL )) AS totalfalse, 
                                        COUNT( IF(result.truefalse = 1,1,NULL ))/COUNT(0)*100 AS trueperc,
                                        COUNT( IF(result.truefalse = 0,0,NULL ))/COUNT(0)*100 AS falseperc
                                FROM results result
                                WHERE fkquestionid = <cfqueryparam cfsqltype="cf_sql_integer" value="#questions.id#">
                                AND NOT ISNULL(result.truefalse)
                                GROUP BY result.fkquestionid
                           </cfquery>
                           <cfset response.totaltruefalse = gettotaltruefalse>
                        </cfcase> 

我正在使用此代码来显示图表。

<cfoutput query="rc.data.questions" group="id">
    <cfchart format="flash" chartwidth="575" chartheight="575" show3d="yes">
                                       <cfchartseries type="pie" paintstyle="raise" seriescolor="blue" datalabelstyle="pattern">
                                           <cfchartdata item="true" value="#rc.data.totaltruefalse.totaltrue#">
                                           <cfchartdata item="false" value="#rc.data.totaltruefalse.totalfalse#">
                                       </cfchartseries> 
                        </cfchart>
</cfoutput>

我的问题是,即使我在所有浏览器中都尝试过,它也显示空白而不是图表。

【问题讨论】:

  • 您的查询是否返回数据?此外,您还指定了“flash”格式。您是否已安装/运行 Flash?
  • 是的,我的查询返回数据,而且我的系统上有闪存。
  • rc.data.totaltruefalse.totaltruerc.data.totaltruefalse.totalfalse 是单一值吗?
  • 实际上我正在像这样循环 这里的图表代码。

标签: coldfusion coldfusion-9 cfchart


【解决方案1】:

我的另一个答案与基于如果您已阻止访问 CFIDE 目录的服务器配置设置有关。另一种方法是通过自己将生成的图表(Flash 文件 .SWF)保存到 Web 服务器然后显示该文件来绕过该行为。

使用 ColdFusion 真的很容易。只需将name 属性添加到您的&lt;cfchart&gt; 标签。这将告诉 ColdFusion 将二进制图表数据存储到以该属性命名的变量中。像这样:

<cfchart format="flash" name="chartname" chartwidth="575" chartheight="575" show3d="yes">
    <cfchartseries type="pie" paintstyle="raise" seriescolor="blue" datalabelstyle="pattern">
        <cfchartdata item="true" value="#rc.data.totaltruefalse.totaltrue#">
        <cfchartdata item="false" value="#rc.data.totaltruefalse.totalfalse#">
    </cfchartseries> 
</cfchart>

在该代码中,我将变量命名为chartname。接下来,将数据写入扩展名为 .SWF 的文件。您需要将此文件写入服务器上的可浏览目录(如图像文件夹或类似文件夹)。像这样:

<cffile action="write" file="C:\webroot\images\mychart.swf" output="#chartname#" />

在该代码中,我将文件mychart.swf 写入C:\webroot\images\ 文件夹。它可以是您希望的任何目录,只要它可以在您的 Web 根目录下访问即可。 output 属性必须与&lt;cfchart&gt; 标签的name 属性中给定的变量名称匹配,并且必须在# 内。

接下来,将该 SWF 文件包含在您的 HTML 代码中。像这样:

<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"  
codebase="http://active.macromedia.com/flash2/cabs/swflash.cab#version=4,0,2,0"
    WIDTH="575" HEIGHT="575">
    <PARAM NAME="movie" VALUE="/images/mychart.swf"/>
    <PARAM NAME="quality" VALUE="high"/>
    <PARAM NAME="bgcolor" VALUE="#FFFFFF"/>
    <EMBED src="/images/mychart.swf" 
        quality="high" bgcolor="#FFFFFF" WIDTH="575" HEIGHT="575" TYPE="application/x-shockwave-flash"
        PLUGINSPAGE="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash">
    </EMBED>
</OBJECT>

在该代码中,&lt;param&gt; 标记的value 属性和&lt;embed&gt; 标记的src 属性必须与上面写入的.SWF 文件的位置(本例中的图像文件夹)匹配。

【讨论】:

  • 这真的很有帮助,它可以成功地在我的图像文件夹中生成图表,但是要查看此图表,我必须通过双击在该文件夹中手动访问它。我真的很感激你让我学到了一些东西谢谢。
  • 很高兴它对您有用。如果您将带有 URL 的 &lt;object&gt;&lt;embed&gt; 标记添加到文件中,它将显示在您的网页中。
【解决方案2】:

我猜这与您的 ColdFusion 服务器上的设置/安全性有关。您可以导航到http://yourserver.com/CFIDE/GraphData.cfm(将 yourserver.com 替换为您的域)吗?为了使&lt;cfchart&gt; 工作,它需要访问CFIDE 目录(注意-该文件实际上并不存在。它只是ColdFusion 图表的别名)。

它还需要访问CFIDE/scripts 目录和在那里找到的CF_RunActiveContent.js JavaScript 文件。

如果您查看生成页面的源代码(带有空白图表),您将看到如下内容:

<html>
    <head><title>Test</title></head>
    <body>
    <div>

    <NOSCRIPT>
    <OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"  
        codebase="http://active.macromedia.com/flash2/cabs/swflash.cab#version=4,0,2,0"
        ID="Images_5281548670100005_SWF" name="Images_5281548670100005_SWF" WIDTH="575" HEIGHT="575">
        <PARAM NAME="movie" VALUE="/CFIDE/GraphData.cfm?graphCache=wc50&graphID=Images/5281548670100005.SWF"/>
        <PARAM NAME="quality" VALUE="high"/>
        <PARAM NAME="bgcolor" VALUE="#FFFFFF"/>
    <EMBED src="/CFIDE/GraphData.cfm?graphCache=wc50&graphID=Images/5281548670100005.SWF" 
        quality="high" bgcolor="#FFFFFF" WIDTH="575" HEIGHT="575" TYPE="application/x-shockwave-flash"
        PLUGINSPAGE="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash">
    </EMBED>
    </OBJECT>
    </NOSCRIPT>
    <script type="text/javascript" charset='utf-8' src='/CFIDE/scripts/CF_RunActiveContent.js'></script>
    <script type="text/javascript" charset='utf-8'>
    CF_RunContent('<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"  \r\n codebase="http://active.macromedia.com/flash2/cabs/swflash.cab#version=4,0,2,0"\r\n ID="Images_5281548670100005_SWF" name="Images_5281548670100005_SWF" WIDTH="575" HEIGHT="575">\r\n\t<PARAM NAME="movie" VALUE="/CFIDE/GraphData.cfm?graphCache=wc50&graphID=Images/5281548670100005.SWF"/>\r\n\t<PARAM NAME="quality" VALUE="high"/>\r\n\t<PARAM NAME="bgcolor" VALUE="#FFFFFF"/>\r\n<EMBED src="/CFIDE/GraphData.cfm?graphCache=wc50&graphID=Images/5281548670100005.SWF" \r\n\t\tquality="high" bgcolor="#FFFFFF" WIDTH="575" HEIGHT="575" TYPE="application/x-shockwave-flash"\r\n PLUGINSPAGE="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash">\r\n</EMBED>\r\n</OBJECT>');
    </script>

    </div>
    </body>
</html>

注意对CFIDE 目录的引用。如果该目录不可访问,&lt;cfchart&gt; 标记将无法正常工作(您将得到一个空白图表)。

关于此问题的两个相关讨论以及潜在的解决方法:

【讨论】:

  • 当我查看它的源代码时,我确实得到了这个。我已经对 .htaccess 文件进行了更改,但它仍然没有解决我的问题。我在 .htaccess RewriteCond%{REQUEST_URI} !/CFIDE/GraphData.cfm[NC] RewriteRule/CFIDE/ /bog/off/mate.html[NC,L] 中添加了这一行。
  • 它成功生成了图表,我可以在图表/缓存中看到它,但问题是,它没有在浏览器上呈现。
  • 您还需要修改另一个文件。您是否也这样做并重新启动了 CF 服务? (我现在无法链接。)
  • 我必须修改哪个文件?是的,我在修改后重新启动了我的 CF 服务器。
  • 让我们备份一下。你能浏览到http://yourserver.com/CFIDE/GraphData.cfm吗?这应该在默认安装中起作用。仅当您进行更改以禁止该 URI(为安全起见)时,它才会起作用。如果您遵循 ColdFusion 锁定指南,它可能会被阻止。我所说的“工作”并不是指将显示图表。那么,浏览该 URI 时会得到什么响应?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-13
相关资源
最近更新 更多