第五期:ColdFusionMX中的循环
序言
任何一种程序再简单也要具备一定的逻辑和算法,Coldfusion也不例外。如果只是靠简单的标签的堆砌,是无法真正实现企业商业逻辑的。而且,我在这里非常肯定的提出一点,就是简单绝对不等于功能弱小。目前,网络技术发展到了一个注重表现的时代,就是每一个开发出来的网络应用,要在实现逻辑的同时,具备让客户有丰富的用户体验是另一个追求的目标。Flash+Flashremoting+cf serverside script就是一种极具体验的开发手段。而对于开发工具,众多的开发厂商更是在工具的易用性上做足了文章,微软vs.net开发平台的完整统一性,Oracle9i JDeveloper开发j2ee程序的wizard方式,Macromedia DreamweaverMX众多的服务器端的脚本语言的支持,都是在工具易用性上的一种体现。我们今天要给大家讲解的就是简单易用的coldfusion loop。通过cf中不同的循环嵌套,能够实现很多在cf中编程的逻辑。
这里的序言还要补充说明一点,操作access数据库时的中文解决的方法,如果哪位开发者有兴趣,请去这里查看并参与探讨:
http://www.flashempire.net/showthread.php?s=a85407ff13de51915c82a57b7eb2e1ee&threadid=125029
第一部分 看看CF中的流程控制和循环
我们点击DreamweaverMX中Insert面板里的cf flow标签,会看到如下的一行图标:
这行图标几乎完成了coldfusion中最重要的流程和循环处理。谈到流程,我们在学习任何一门语言的过程中第一个接触到的就是if…then…else这个流程控制语句。想必很多从事网页设计的朋友都不可避免的接触过这个逻辑。这个逻辑是简单的,但是是最常用到的。在上图中,用文字显示“if else elsif”就是使用cf中的if流程控制。点击标有文字“if”的时候,我们用原代码的方式观察页面,就会看到在光标所在出已经插入了<cfif></cfif>这个代码段。我们把所有在cf中用<cfxxx>…</cfxxx>都看作一个封闭的代码段,不管它有多长,也不管它有多短。
使用cfif标签,标准的简单描述应该是这样的:
<cfif 你要判断的条件>
你要做的事情:可以是一行输出,也可以是若干个其他的复杂的代码段。
</cfif>
那么我们经常使用一些判断条件的操作符来决定cfif的流程的走向,因为在cfif的逻辑判断中,只有真(1)和假(0)两种,如果条件为真,就做cfif标签中间嵌套的事务,如果为假,就跳出这个逻辑,去处理下一个逻辑。那么cf中的操作符非常的人性话,它使用语言表达判断,而不是符号。比如,“=”在cfif的条件操作符中要表达为“EQ”,“>”要表示为“GREATER THAN”或者“GT”。如果我们判断a是否等于B,那么在cf中要这样写:
<cfif A EQ B>
<cfset A=B>
</cfif>
使用详细的条件操作符请看下表:
|
Operator(解释) |
缩写 |
Operator(解释) |
缩写 |
|
IS(==) |
EQUAL,EQ |
GREAT THAN OR EQUAL TO(>=) |
GTE,GE |
|
IS NOT(<>) |
NOT EQUAL,NEQ |
LESS THAN OR EQUAL TO(<=) |
LTE,LE |
|
GREATER THAN(>) |
GT |
Contains(包括) |
|
|
LESS THAN(<) |
LT |
Does Not Contain(不包括) |
那么另外的else和elsif是嵌套在完整的cfif中的,下面这段代码是一个完整的说明:
<cfif 表达式1>
代码段1
<cfelseif 表达式2>
代码段2
<cfelse>
代码段3
</cfif>
如果表达式一成立,则做代码段1,如果表达式1不成立,则判断表达式2是否成立,如果表达式2成立,则做代码段2,否则做代码段3。各位没有开发基础的朋友,可以试试这段小代码,之后运行一下就明白结果了。
<cfif 1 is 0>
<cfoutput>1</cfoutput>
<cfelseif 2 is 0>
<cfoutput>2</cfoutput>
<cfelse>
<cfoutput>3</cfoutput>
</cfif>
开发程序我们在控制流程的过程中,还用到了switch…case方法,在coldfusion的编程方式中同样支持。而对于Switch…case方法,使用起来也是很简单的,这里进行一下简单的讲解。点击
这三个图标来完成cfswitch的操作,目的在于让开发者进行同一种表达式对于多种结果值的条件下进行流程的选择。点击了左边的图标之后,我们会看到下面的窗口:
语法操作如下:
<cfswitch expression= "#var#">
<cfcase value= "x1">
action1
</cfcase>
<cfcase value= "x2">
action2
</cfcase>
…
<cfdefaultcase>
default action
</cfdefaultcase>
</cfswitch>
语法解释非常的简单,对于表达式expression,用cfcase的value属性来反映表达式中#var#的值,然后针对不同的值,来响应不同的action,做不同的操作,如果没有值匹配,那么做cfdefaultcase标签中的默认action。来个macromedia官方标准的程序段看看:
<cfquery name = "GetEmployees" dataSource = "cfsnippets">
SELECT Emp_ID, FirstName, LastName, EMail, Phone, Department
FROM Employees
</cfquery>
<h3>cfswitch Example</h3>
<p>Each time the case is fulfilled, the specific information is printed;
if the case is not fulfilled, the default case is output </p>
<cfoutput query="GetEmployees">
<cfswitch expression="#Trim(Department)#">
<cfcase value="Sales">
#FirstName# #LastName# is in <b>sales</b><br><br>
</cfcase>
<cfcase value="Accounting">
#FirstName# #LastName# is in <b>accounting</b><br><br>
</cfcase> <cfcase value="Administration">
#FirstName# #LastName# is in <b>administration</b><br><br>
</cfcase>
<cfdefaultcase>
#FirstName# #LastName# is not in Sales, Accounting, or
Administration.<br><br>
</cfdefaultcase>
</cfswitch>
</cfoutput>
这段代码就是通过了cfswitch来显示cfmx默认数据源cfsnippets中Employees表中的人员,而方式用department(所在的部门)变量在cfswitch中cfcase的不同value来区分显示开来。
我们来看cf flow面

