-->ColdFusion 初级教程-->建立循环(CFLOOP)

ColdFusion

后页 前页
目录
北极星书库
建立循环(CFLOOP)


循环是非常强大的编程技术,它使你能够根据特定的条件而重复执行某些代码。用CFLOOP可以执行四种类型的循环:


·索引循环(也叫For循环)


·条件循环(也叫While循环)


·对一个查询进行循环


·对一个列表进行循环


·对一个COM集合进行循环


你通过CFLOOP标签的不同属性来选择使用不同的循环类型。


索引循环


索引循环根据一个数字范围而重复执行循环体,当你知道循环重复执行的次数时,可以使用索引循环。每次执行循环体时,变量INDEX就会加1。下面的例子循环5次,每次循环显示当前的索引值:


<CFLOOP INDEX="LoopCount" FROM="1" TO="5">


The loop index is <CFOUTPUT>#LoopCount#</CFOUTPUT>.<BR>


</CFLOOP>


这个循环在浏览器中显示的结果类似于:


The loop index is 1.


The loop index is 2.


The loop index is 3.


The loop index is 4.


The loop index is 5.


在缺省情况下,每次循环INDEX增加1,你可以设置STEP属性来改变这一缺省值。如下例:


<CFLOOP INDEX="LoopCount" FROM="5" TO="1" STEP="-1">


The loop index is <CFOUTPUT>#LoopCount#</CFOUTPUT>.<BR>


</CFLOOP>


在浏览器中显示的结果类似于:


The loop index is 5.


The loop index is 4.


The loop index is 3.


The loop index is 2.


The loop index is 1.


条件循环


条件循环当一个给定的条件为真时重复执行循环体。使用这种循环时,每次执行循环体都要改变循环条件,直到该条件的值成为“FALSE”。


下面的例子将参数“CountVar”从1增加到5


<!--- Set the variable CountVar to 1 --->


<CFSET CountVar= 0>


<!--- Loop until CountVar is 5 --->


<CFLOOP CONDITION="CountVar LT 5">


<CFSET CountVar=#CountVar# + 1>


The loop index is <CFOUTPUT>#CountVar#</CFOUTPUT>.<BR>


</CFLOOP>


在浏览器中显示的结果类似于:


The loop index is 1.


The loop index is 2.


The loop index is 3.


The loop index is 4.


The loop index is 5.


 


查询循环


查询循环对查询结果记录集中的每条记录重复执行循环体。CFLOOP的结果与CFOUTPUT相似。每次执行循环体时,当前记录的各个字段可以被输出。但是,CFLOOP的执行速度比CFOUTPUT慢很多。


1:用CFLOOP显示一个记录集


下面的例子中,CFLOOP实现了与CFOUTPUT相同的功能:


<CFQUERY NAME="MessageRecords" DATASOURCE="Customer">


SELECT * FROM Messages


</CFQUERY>


<CFLOOP QUERY="MessageRecords">


<CFOUTPUT> #Message_ID# </CFOUTPUT><BR>


</CFLOOP>


2:一个查询结果的“下n个记录”


CFLOOP也可以对给定了起始点和结束点的一组记录进行循环。这样,你可以从第10个记录开始循环,到第20个记录结束循环。这种机制提供了一个简单的方法,用来得到一个记录集中的下n条记录。下面的例子对查询“MyQuery”的结果中第10到第20条记录进行循环:


<CFSET Start=10>


<CFSET End=20>


<CFLOOP QUERY="MyQuery" STARTROW="#Start#" ENDROW="#End#">


<CFOUTPUT>#MyQuery.MyColName#</CFOUTPUT><BR>


</CFLOOP>


当没有记录或当前记录的序号大于ENDROW的值时,循环结束。


3:对全部查询结果进行循环


下面的例子用CFINCLUDE将一个查询所查到的所有文件包含到同一个文档中:


<CFQUERY NAME="GetFile" DATASOURCE="Library" MAXROWS=5>


SELECT FileName FROM Templates


</CFQUERY>


<CFLOOP QUERY="GetFile">


<CFINCLUDE TEMPLATE="#FileName#">


</CFLOOP>


如果你要对记录集中的所有记录进行循环,也可以使用CFOUTPUT,如下例所示:


<CFOUTPUT QUERY="MyQuery">


Text and #variablename#


</CFOUTPUT>


注意,在CFOUTPUT标签中指定QUERY属性,即表示对该查询结果的每条记录分别执行CFOUTPUT代码块。


列表循环


列表循环对一个列表中的所有元素分别执行循环体。在列表循环中,用LIST属性指定一个列表或一个包含列表的变量,用INDEX属性指定一个变量名,该变量名用来引用列表中的下一个元素。下面的例子显示列表中的每个人名:


<CFLOOP INDEX="ListElement" LIST="John,Paul,George,Ringo">


<CFOUTPUT>#ListElement#</CFOUTPUT><BR>


</CFLOOP>


缺省情况下,CFLOOP认为列表中的元素以逗号为分隔符,但你可以在DELIMITER属性中指定你所喜欢的分隔符。下面的例子与上一个有相同的效果,不同的是逗号,冒号,和斜杠都会被视为元素分隔符。


<CFLOOP INDEX="ListElement"


LIST="John/Paul,George::Ringo" DELIMITERS=",:/">


<CFOUTPUT>#ListElement#</CFOUTPUT><BR>


</CFLOOP>


指定分隔符时不需要特定的顺序。注意连续的分隔符被视为单个分隔符;因此上例中“George”和“Ringo”之间的两个冒号被视为一个。


对一个COM集合进行循环


CFLOOPCOLLECTION属性使你能对一个COM/DCOM集合对象进行循环。一个COM/DCOM集合对象是一组相似对象(称为“项”)的整体。例如,一个应用程序中一组打开的文档就是一种集合。你用CFLOOPITEM属性指定一个变量名,用来在循环体中引用集合中的每一项。COLLECTION属性用来指定要对之进行循环的COM/DCOM集合。


在下面例子中,ITEM属性指定了一个变量file2,于是,在每次执行循环体时,该变量代表集合中的当前项。在CFOUTPUT中,当前项的name属性被显示。


<CFOBJECT CLASS="FileFunctions.files"


NAME="FFunc"


ACTION="Create">


<CFSET FFunc.Path="c:\">


<CFSET FFunc.Mask="*.*">


<CFSET FFunc.attributes=16>


<CFSET x=FFunc.GetFileList()>


<CFLOOP COLLECTION=#FFUNC# ITEM="file2">


<CFOUTPUT> #file2.name# <BR>


</CFOUTPUT>


</CFLOOP>


循环的嵌套


一个CFLOOP代码块中可以包含其它的CFLOOP标签。在这种情况下,每次执行外层循环时,内层循环都会被完整地执行一次。循环可以嵌套任意多层。


在下面的例子中,内层循环体总共会被执行15次:


<CFLOOP INDEX="OuterLoopCount" FROM="1" TO="3">


<CFOUTPUT>Outer loop #OuterLoopCount#</CFOUTPUT><BR>


<CFLOOP INDEX="InnerLoopCount" FROM="1" TO="5">


<CFOUTPUT>Inner loop #InnerLoopCount#</CFOUTPUT><BR>


</CFLOOP>


</CFLOOP>


ColdFusion在循环体内遇到CFBREAK标签时,就终止循环体的执行,直接处理循环体后面的语句。对于复杂的标签结构以及深层的嵌套,这可以简化程序结构。


下面的例子并不太好,但它显示了CFBREAK标签的功能:


<CFLOOP INDEX="LoopCount" FROM=1 TO=100>


The value is <CFOUTPUT>#LoopCount#</CFOUTPUT>.<BR>


<CFIF LoopCount IS 7>


<CFBREAK>


</CFIF>


</CFLOOP>


在浏览器中显示的结果将是:


The value is 1.


The value is 2.


The value is 3.


The value is 4.


The value is 5.


The value is 6.


The value is 7.



后页
前页
目录
北极星书库