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: 为什么有时候在输出的HTML页面里我得到的是#var#而不是实际的变量? 大多数情况下是因为你忘了用<CFOUTPUT> 和 </CFOUTPUT>标签。 4: Verity是用来干什么的? Verity是一个全文搜索引擎。用来实现灵活快速的对特定文字进行搜索。ColdFusion中的Verity有两种使用方法:1)使用Verity对硬盘上的文件按指定内容进行搜索(包括文本文件,MS Word文档等),2)Verity也可以对数据库中的记录进行搜索(特别是对文字内容校多的字段)。 要使用Verity,请参考ColdFusion中的<CFSEARCH>标签。 5: CFML条件判断标签可以嵌套使用吗? CFML的条件判断和流程控制标签(如<CFIF>,<CFLOOP>)可以被嵌套使用,但过多的嵌套会影响执行速度,所以尽量避免不必要的嵌套. 6: 在ColdFusion中使用队列(lists)时,为什么空的元素会被忽略? ColdFusion队列和CSV的有些区别,ColdFusion会忽略空的队列元素,如:ListLen("a,b,,d,e")会返回4而不是5,执行ListGetAt("a,b,,d,e",5)就会报错。在这种情况下,可以先用Replace()函数把所有的",,"(逗号 逗号)替换为", ,"(逗号 空格 逗号)。空格是一个能被ColdFusion识别的队列元素。 7: 什么时候要在<CFQUERY>内的SQL语句中用到引号? 所有写在<CFQUERY>和</CFQUERY>中的内容都会被传送到数据库进行处理,和CFML不一样,SQL不会对变量自动转型,在写SQL语句时必须严格遵守SQL语句的规范。所有字符串(包括被用作字符串的变量)都必须用单引号围起来,而数值不能用引号围起来,所用到的日期和时间也都必须符合相应的格式。 8: 我该应用 <CFINSERT> 和 <CFUPDATE> 标签吗? 当然可以,而且条件许可的话,没有理由不去用。不过,要注意的是使用这些标签有很大的限制。它们只能和FORM表单用在一起,且表单中的元素必须和数据库中的字段使用相同的名称,另外也无法象标准SQL中那样的功能强大,当用<CFUPDATE>时,还必须在表单中指明关键字段。 9: 我的邮件服务器在发送邮件时需要认证,在用ColdFusion发邮件时我如何能发送认证信息? 从ColdFusion MX 6.1开始,ColdFusion支持SMTP的认证。你可以在<CFMAIL>标签中提供相应的认证信息,或在ColdFusion管理界面中用以下的格式提供认证信息:user:password@hostname 10: 能不能在同一邮件中生成普通文本和HTML超文本两种不同的信息? 从ColdFusion MX 6.1开始用新的 <CFMAILPART>标签即可。请参考下面的代码。 <CFMAIL TO="..." FROM="..." SUBJECT="..."> <CFMAILPART TYPE="text"> 普通文本信息。。。 </CFMAILPART> <CFMAILPART TYPE="html"> <B>超文本信息。。。</B> </CFMAILPART> </CFMAIL>
11: 我想发送邮件给一邮件组用户,我如何才能跟踪邮件的发送结果?如失败或者被拒绝。 <CFMAIL>中有一个FAILTO属性,可以用来指定一个邮件地址,在遇到邮件发送失败的情况时,ColdFusion会向此邮件地址发送一个失败通知。
<CFMAIL TO="#email#" FROM="admin@myhost.com" FAILTO="listadmin@myhost.com" ...> ... </CFMAIL> 12: 怎么才能得到一个文件的大小,最后修改的日期和时间? <CFDIRECTORY>可以用来访问ColdFusion所在服务器上的文件目录, 其中的ACTION="list" 参数可以帮你获得这些信息。 13: ColdFusion可以访问客户机上的文件吗? 不可以,ColdFusions是运行在服务器端的,不能在客户机端做任何操作。ColdFusion只能通过客户端的浏览器获得一些客户机信息。所以ColdFusion不能访问处理客户机端的任何文件,除非在上传到服务器端以后。 14: 如何把客户端的文件传递给ColdFusion? 最安全的方法是通过客户的浏览器使用HTTP文件上传功能。ColdFusion的确可以通过HTTP或FTP访问网络资源,但这要求被访问的一端有相应的HTTP或FTP服务器。这在一般的客户端都是没有的。 15: 如何写一段能用来让客户上传文件的表单代码? 创建一个表单,指定表单的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"> 16: 如何访问并处理上传的文件? 通过客户端表单上传的文件可以由<CFFILE ACTION="upload"> 标签来访问处理。通过此标签,可以对上传的文件进行处理,如保存,改名,限制上传文件类型等。 17: REQUEST有效的有效范围是什么? 和Variables一样,Request只能在一个页面处理请求中有效(同Application或Session对比)。但它们的区别在于,Request同时还能被同一页面处理过程中所用到的其它文件所访问,如Custom Tags。 18: 如何在用户关闭浏览器后马上结束session变量 在ColdFusion MX中,通过改变ColdFusion管理员界面中的一个设置,就能轻易实现:进入Memory Variabes菜单,选中Use J2EE session variables选项。 在MX以前的版本中,ColdFusion Session变量使用cookies(CFID和CFTOKEN)来定位每一个用户。缺省的情况下,这些Cookies留在客户端的硬盘上,即使用户关闭浏览器。要避免这种情况,这需要重写这些Cookies让它们在浏览器关闭之后过期就可以了。请参考下面的代码。
<CFCOOKIE NAME="cfid" VALUE="#SESSION.cfid#"> <CFCOOKIE NAME="cftoken" VALUE="#SESSION.cftoken#"> 19: 什么时候需要用到<CFLOCK> <CFLOCK>是用来控制对一段代码或变量的并发存取的。在早期的ColdFusion版本中,如果不对并发的存取进行控制的话,可能会导致服务器的不稳定。在ColdFusion MX中,这一问题已经得到解决,但还是有理由要使用<CFLOCK>的。首先,有些情况下必须使用<CFLOCK>,如多用户情况下对系统文件的存取。其次,就算对一段代码或变量的并发存取不会导致系统的不稳定,有时也会给你的程序带来一些影响,导致一些奇怪的程序结果。如当对一个application变量进行修改而不把此变量锁定话,用户访问到的可能是一部分新的数据,一部分老的数据。那样程序运行结果可能就不是你预想的那样了。所以当出现类似问题时,还是要用的<CFLOCK>。 20: EXCLUSIVE 和 READONLY两种锁定有什么区别? <CFLOCK>支持两种类型的锁定,EXCLUSIVE 和 READONLY。EXCLUSIVE锁定完全防止其它代码的的访问。READONLY锁定并不是一种真正的锁定,只是给一端代码加上一个标记,表示只有当前没有被EXCLUSIVE锁定的时候才能执行。 21: 如何才能实现动态变量名呢? 窍门是先用""把变量名围起来,然后把要作为动态变量名的部分用##围起来。可以看看下面的例子。 <!--- 设置变量 i 值为 1 ---> <CFSET i=1> <!--- 创建一个动态的变量名product1---> <CFSET "product#i#"="apple"> <!--- 显示product1的值---> <CFOUTPUT>#product1#</CFOUTPUT> 22: 如何得到一个拥有动态变量名的变量的值? 可以用Evaluate() 函数动态的构造变量名,请看下面的例子。 <!--- Set i ---> <CFSET i=1> <!--- Display product1 variable ---> <CFOUTPUT>#Evaluate("product#i#")#</CFOUTPUT>
23: 在获得一个Query查询结果之后,如何得到它的字段列表? 每个Query查询结果都带有一个叫columnlist的变量,可以用来获得Query的字段列表.如 :queryname.columnlist 24: 如何获得接收到的Form或URL变量的列表? 在ColdFusion中,接收到的Form或URL变量都是以ColdFusion structures 变量的结构存在的,可以用ColdFusion提供的structures的一些函数来访问处理它们。当然也可以用<CFLOOP>来循环其中的每一个元素。 25: 如何直接的访问query数据中的某一个数据? 在ColdFusion中,query其实就是sturcture,每条记录就是一个数组。要直接的访问query中的某一条记录中的某一个数据,可以用这种方式:#query.column[row]#。如:想要得到query “products”中的“price”字段的第五条记录,可以用这种表达是式:#products.price[5]#。 这种方法在一些情况下非常有用,如用<CFLOOP>循环处理一个query。 26: 如何才能用ColdFusion生成可打印的PDF文档? ColdFusion目前还不能直接生成PDF文档。但有一些第三方的产品可以用来实现这些功能。如ActivePDF(http://www.activepdf.com/ )
出处:cffaq.com
责任编辑:蓝色
◎进入论坛网络编程版块参加讨论
|