![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
||
|
创建服务器行为时,可以使用循环结构将某个代码块重复指定的次数。循环语法为:
<@ loop (@@参数 1
@@,@@参数 2
@@,@@参数 3
@@,@@参数 n
@@) @> 代码块 <@endloop@>
“loop”指令采用逗号分隔的参数数组列表作为参数。在这种情况下,参数数组参数使用户能够为单个参数提供多个值。重复文本将被拷贝 n 次,其中 n 是参数数组参数的长度。如果指定多个参数数组参数,则所有数组的长度必须相同。在第 i 次循环计算时,参数数组的第 i 个元素将替换代码块中的相关参数实例。
当以后创建服务器行为对话框(请参见为自定义服务器行为创建对话框)时,可以向该对话框添加控件,使页面设计者能够创建参数数组。Dreamweaver 包括一个简单的数组控件,可用于创建对话框。这个称作“文本域逗号分隔列表”的控件可以通过“服务器行为创建器”获得。若要创建更为复杂的用户界面元素,请参见 API 文档,以创建包含控件(例如,网格控件)的对话框来创建数组。
“loop”指令无法嵌套,但是条件指令(请参见条件式代码块)却可以嵌套在“loop”指令中。
下面的示例显示如何使用这样的重复代码块来创建服务器行为(示例为用于访问预存过程的 ColdFusion 行为):
<CFSTOREDPROC procedure="AddNewBook" datasource=#MM_connection_DSN# username=#MM_connection_USERNAME# password=#MM_connection_PASSWORD#> <CFPROCPARAM type="IN" dbvarname="@CategoryId" value="#Form.CategoryID#" cfsqltype="CF_SQL_INTEGER"> <CFPROCPARAM type="IN" dbvarname="@ISBN" value="#Form.ISBN#" cfsqltype="CF_SQL_VARCHAR"> </CFSTOREDPROC>
在该示例中,CFSTOREDPROC 标签可以包含零个或多个 CFPROCPARAM 标签。但是,如果不支持“loop”指令,则没有办法在插入的 CFSTOREDPROC 标签内包括 CFPROCPARAM 标签。如果在不使用“loop”指令的情况下,将该示例创建为服务器行为,则该示例需要分成两部分:主 CFSTOREDPROC 标签,以及有多个涉及类型的 CFPROCPARAM 标签。
使用“loop”指令可以将相同的过程按如下方式编写:
<CFSTOREDPROC procedure="@@procedure@@" datasource=#MM_@@conn@@_DSN# username=#MM_@@conn@@_USERNAME# password=#MM_@@conn@@_PASSWORD#> <@ loop (@@paramName@@,@@value@@,@@type@@) @> <CFPROCPARAM type="IN" dbvarname="@@paramName@@" value="@@value@@" cfsqltype="@@type@@"> <@endloop@> </CFSTOREDPROC>
在上述示例以及条件代码块的情况下,@>
后面的换行符将被忽略。
如果用户在“服务器行为”对话框中输入下列参数值:
procedure = "proc1" conn = "connection1" paramName = ["@CategoryId", "@Year", "@ISBN"] value = ["#Form.CategoryId#", "#Form.Year#", "#Form.ISBN#"] type = ["CF_SQL_INTEGER", "CF_SQL_INTEGER", "CF_SQL_VARCHAR"]
则服务器行为将下列运行时代码插入页面:
<CFSTOREDPROC procedure="proc1" datasource=#MM_connection1_DSN# username=#MM_connection1_USERNAME# password=#MM_connection1_PASSWORD#> <CFPROCPARAM type="IN" dbvarname="@CategoryId" value="#Form.CategoryId#" cfsqltype="CF_SQL_INTEGER"> <CFPROCPARAM type="IN" dbvarname="@Year" value="#Form.Year#" cfsqltype="CF_SQL_INTEGER"> <CFPROCPARAM type="IN" dbvarname="@ISBN" value="#Form.ISBN#" cfsqltype="CF_SQL_VARCHAR"> </CFSTOREDPROC>
备注: 除非是作为条件指令表达式的一部分,否则,参数数组不能在循环外使用。
|
||
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |