当前位置: 首页 > 工具软件 > ColdFusion > 使用案例 >

coldfusion的常见问题

宋稳
2023-12-01
1: 到底什么时候该用#符号把变量和表达式围起来?  
 在CFML中,#是用来把ColdFusion变量或表达式从字符串中区分开的符号。可以把<CFOUTPUT> 和 </CFOUTPUT>当中的内容当成一个字符串,其中的变量或表达式必须用#围起来,ColdFusion在处理是就会对其做相应的处理。但是,在标签里,所有的数据都被当作变量或表达式而不是字符串,因此不需要#(如:<CFSET x=y+1>)。所以只有在ColdFusion把数据当成字符串时才要用#把变量或表达式区分开。
 
 
2: 在HTML中用#表示颜色时(如<CFOUTPUT><hr color="#FF0000">...</CFOUTPUT>),ColdFusion会出错,如何解决?  
 #在ColdFusion有其特殊的意义,是用来把变量和表达式从字符串中区分开的。而且必须配对使用,(如<CFOUTPUT>#now()#</CFOUTPUT>)如果ColdFusion发现只有一个#的话就报错,解决的方法时用两个#来转义,如:<CFOUTPUT><hr color="##FF0000">...</CFOUTPUT>这样就没问题了。
 
 
3: CFML条件判断标签可以嵌套使用吗?  
 CFML的条件判断和流程控制标签(如<CFIF>,<CFLOOP>)可以被嵌套使用,但过多的嵌套会影响执行速度,所以尽量避免不必要的嵌套.
 
 
4: 在ColdFusion中使用队列(lists)时,为什么空的元素会被忽略?  
 ColdFusion队列和CSV的有些区别,ColdFusion会忽略空的队列元素,如:ListLen("a,b,,d,e")会返回4而不是5,执行ListGetAt("a,b,,d,e",5)就会报错。在这种情况下,可以先用Replace()函数把所有的",,"(逗号 逗号)替换为", ,"(逗号 空格 逗号)。空格是一个能被ColdFusion识别的队列元素。
 
 
5: 什么时候要在<CFQUERY>内的SQL语句中用到引号?  
 所有写在<CFQUERY>和</CFQUERY>中的内容都会被传送到数据库进行处理,和CFML不一样,SQL不会对变量自动转型,在写SQL语句时必须严格遵守SQL语句的规范。所有字符串(包括被用作字符串的变量)都必须用单引号围起来,而数值不能用引号围起来,所用到的日期和时间也都必须符合相应的格式。
 
 
6: 我该应用 <CFINSERT> 和 <CFUPDATE> 标签吗?  
 当然可以,而且条件许可的话,没有理由不去用。不过,要注意的是使用这些标签有很大的限制。它们只能和FORM表单用在一起,且表单中的元素必须和数据库中的字段使用相同的名称,另外也无法象标准SQL中那样的功能强大,当用<CFUPDATE>时,还必须在表单中指明关键字段。
 
 
7: 怎么才能得到一个文件的大小,最后修改的日期和时间?  
 <CFDIRECTORY>可以用来访问ColdFusion所在服务器上的文件目录, 其中的ACTION="list" 参数可以帮你获得这些信息。
 
 
8: ColdFusion可以访问客户机上的文件吗?  
 不可以,ColdFusions是运行在服务器端的,不能在客户机端做任何操作。ColdFusion只能通过客户端的浏览器获得一些客户机信息。所以ColdFusion不能访问处理客户机端的任何文件,除非在上传到服务器端以后。
 
 
9: 如何把客户端的文件传递给ColdFusion?  
 最安全的方法是通过客户的浏览器使用HTTP文件上传功能。ColdFusion的确可以通过HTTP或FTP访问网络资源,但这要求被访问的一端有相应的HTTP或FTP服务器。这在一般的客户端都是没有的。
 
 
10: 如何写一段能用来让客户上传文件的表单代码?  
 创建一个表单,指定表单的ENCTYPE属性为"multiform/form-data",添加一个表单元素,类型为“文件”(TYPE="file")。这段代码在客户端显示的时候,客户会看到相应的操作界面来选择要上传的文件,当这个表单被递交的时候,文件就会被上传到服务器端。

<FORM ACTION="process.cfm"
      ENCTYPE="multipart/form-data"
      METHOD="post">
File: <INPUT TYPE="file" NAME="FileToUpload">
<BR>
<INPUT TYPE="submit" VALUE="Upload">

 
 
11: 如何访问并处理上传的文件?  
 通过客户端表单上传的文件可以由<CFFILE ACTION="upload"> 标签来访问处理。通过此标签,可以对上传的文件进行处理,如保存,改名,限制上传文件类型等。
 
 
12: REQUEST有效的有效范围是什么?  
 和Variables一样,Request只能在一个页面处理请求中有效(同Application或Session对比)。但它们的区别在于,Request同时还能被同一页面处理过程中所用到的其它文件所访问,如Custom Tags。
 
 
13: 如何让Sessions在客户端的浏览器关闭后结束?  
 ColdFusion的Session变量用两个客户端的Cookies(CFID和CFTOKEN)来识别每个不同的客户。在缺省的情况下,Cookies是存在客户端硬盘内的,所以即使客户的浏览器关闭,下次访问时Session还是保留的。要防止这种情况,只要定义Cookies在浏览器关闭之后被清除就可以了。

<CFCOOKIE NAME="cfid" VALUE="#SESSION.cfid#">
<CFCOOKIE NAME="cftoken" VALUE="#SESSION.cftoken#">

 
 
14: 什么时候需要用到<CFLOCK>  
 <CFLOCK>是用来控制对一段代码或变量的并发存取的。在早期的ColdFusion版本中,如果不对并发的存取进行控制的话,可能会导致服务器的不稳定。在ColdFusion MX中,这一问题已经得到解决,但还是有理由要使用<CFLOCK>的。首先,有些情况下必须使用<CFLOCK>,如多用户情况下对系统文件的存取。其次,就算对一段代码或变量的并发存取不会导致系统的不稳定,有时也会给你的程序带来一些影响,导致一些奇怪的程序结果。如当对一个application变量进行修改而不把此变量锁定话,用户访问到的可能是一部分新的数据,一部分老的数据。那样程序运行结果可能就不是你预想的那样了。所以当出现类似问题时,还是要用的<CFLOCK>。
 
 
15: EXCLUSIVE 和 READONLY两种锁定有什么区别?  
 <CFLOCK>支持两种类型的锁定,EXCLUSIVE 和 READONLY。EXCLUSIVE锁定完全防止其它代码的的访问。READONLY锁定并不是一种真正的锁定,只是给一端代码加上一个标记,表示只有当前没有被EXCLUSIVE锁定的时候才能执行。
 
 
16: 如何才能实现动态变量名呢?  
 窍门是先用""把变量名围起来,然后把要作为动态变量名的部分用##围起来。可以看看下面的例子。

<!--- 设置变量 i 值为 1 --->
<CFSET i=1>
<!--- 创建一个动态的变量名product1--->
<CFSET "product#i#"="apple">
<!--- 显示product1的值--->
<CFOUTPUT>#product1#</CFOUTPUT>

 
 
17: 如何得到一个拥有动态变量名的变量的值?  
 可以用Evaluate() 函数动态的构造变量名,请看下面的例子。

<!--- Set i --->
<CFSET i=1>
<!--- Display product1 variable --->
<CFOUTPUT>#Evaluate("product#i#")#</CFOUTPUT>

 
 
18: 在获得一个Query查询结果之后,如何得到它的字段列表?  
 每个Query查询结果都带有一个叫columnlist的变量,可以用来获得Query的字段列表.如 :queryname.columnlist
 
 
19: 如何获得接收到的Form或URL变量的列表?  
 在ColdFusion中,接收到的Form或URL变量都是以ColdFusion structures 变量的结构存在的,可以用ColdFusion提供的structures的一些函数来访问处理它们。当然也可以用<CFLOOP>来循环其中的每一个元素。
 
 
20: 如何直接的访问query数据中的某一个数据?  
 在ColdFusion中,query其实就是sturcture,每条记录就是一个数组。要直接的访问query中的某一条记录中的某一个数据,可以用这种方式:#query.column[row]#。如:想要得到query “products”中的“price”字段的第五条记录,可以用这种表达是式:#products.price[5]#。 这种方法在一些情况下非常有用,如用<CFLOOP>循环处理一个query。
 类似资料: