用CFML自定义控制标签建设一个表单。这样就比标准的HTML表单提供了更多输入元素的功能。你可以在客户端页面比如 HTML 或 Adobe Flash内容包含这些最终表单,并且通过使用XML 和 XSLT产生表单。
<cfform
accessible = "yes|no"
action = "form action"
archive = "URL"
codeBase = "URL"
format = "HTML|Flash|XML"
height = "pixels|percent"
id = "HTML id"
method = "POST|GET"
name = "name"
onError = "JavaScript function name or ActionScript code"
onLoad = "load event script"
onReset = "reset event script"
onSubmit = "JavaScript"
onSuccess = "JavaScript function name"
preloader = "yes|no"
preserveData = "yes|no"
scriptSrc = "path"
skin = "Flash skin|XSL skin"
style = "style specification"
timeout = "seconds"
width = "pixels|percent"
wMode = "window|transparent|opaque">
...
</cfform>
下面的表格罗列了ColdFusion直接使用的属性。对于HTML格式的表单,这个标签也允许使用标准的 HTML form 标签,(而该标签并没有在以下清单里)并把它们直接传递给浏览器。ColdFusion也包括了XML里所有支持HTML的属性。
|
属性 |
适用于 |
必选/可选 |
默认 |
描述 |
|---|---|---|---|---|
|
accessible |
Flash |
可选 |
no |
指定是否在Flash表单里包含支持屏幕阅读功能。屏幕阅读功能支持添加了大概80 KB给SWF文件发送给客户端。 |
|
action |
Flash HTML XML |
可选 |
See Description |
当表单提交运行的时候,要执行的ColdFusion页面的名字。 如果你忽略了这个属性,传递给页面的表单就被CGI.SCRIPT_NAME 变量确定,请求的页面最后显示表单。 |
|
archive |
applets in HTML and XML |
可选 |
/CFIDE/classes/cfapplets.jar |
可供 cfgrid, cfslider, 和 cftree applet控件下载的Java 类的URL地址。 |
|
codeBase |
applets in HTML and XML |
可选 |
/CFIDE/classes/cf-j2re-win.cab |
可供IE浏览器可以下载的JRE插件的URL地址 ,使用对象cfgrid, cfslider, 和 cftree Java applet 程序控件。 |
|
format |
Flash HTML XML |
可选 |
HTML |
|
|
height |
Flash XML |
可选 |
100% |
表单的高度。用一个数字来指定像素。对于 Flash, 你可以使用一个百分比的数值,比如说 "height=60%" 来指定一个可用的宽度的百分数。这样展现的高度会比指定的大小要小一些。 注意: 高度和宽度的属性对于Flash表单来说是要求的,如果他们使用在一个表格里的话。 |
|
id |
|
|
name attribute value |
表单的HTML id |
|
method |
Flash HTML XML |
可选 |
post |
浏览器用来传递表单数据给服务器的方法:
|
|
name |
Flash HTML XML |
可选 |
CFForm_n |
表单的名字 以HTML的形式 ,如果你忽略了该属性,并指定一个 id 属性, ColdFusion 就不会包含一个HTML格式的命名属性发送给浏览器。这个行为可以让你使用cfform标签来创建XHTML规格的表单。如果你忽略了命名属性和id属性,ColdFusion会产生一个表单CFForm_n的名称,这里的n是在页面上指一个串行指派给表单的数字。 |
|
onError |
Flash HTML |
可选 |
|
对于Flash格式表单只适用于onSubmit 或 onBlur 的验证;对onServer 验证没有影响。 ActionScript表达式,当用户提交了一个或者多个验证错误的的时候用来处理。 对于HTML格式表单来说:只适用于 cfdiv, cflayout, cfpod, 或 cfwindow控件内的表单。如果表单异步提交失败的时候 ,一个JavaScript函数会运行。更多信息,请看 使用方法章节里的Using forms in cfdiv, cflayout, cffpod, and cfwindow controls |
|
onLoad |
HTML XML |
可选 |
|
当表单负载的时候,JavaScript就会运行。 |
|
onReset |
HTML XML |
可选 |
|
当用户点击reset按钮的时候,JavaScript就会开始运行。 |
|
onSubmit |
Flash HTML XML |
可选 |
|
JavaScript或ActionScript函数会在表单提交前运行以处理数据。如果有子标签特别指定onSubmit验证,ColdFusion会在运行JavaScript前执行验证。 |
|
onSuccess |
HTML |
可选 |
|
只适用于cfdiv, cflayout, cfpod, 或 cfwindow控件里面的表单。当一个异步表单提交成功的时候,一个 JavaScript函数的名字就会运行。更多信息,请看使用方法章节里的Using forms in cfdiv, cflayout, cffpod, and cfwindow controls。 |
|
preloader |
Flash |
可选 |
yes |
指定当负载Flash表单的时候是否要显示一个进度条。 |
|
preserveData |
HTML XML |
可选 |
no |
当cfform action属性返回包含了表单的页面的时候,这个属性定义了是否撤消有提交的值的控件值。
适用于这些控件:
|
|
scriptSrc |
Flash HTML XML |
可选 |
See Description |
指定 URL,相关于 web root, 它的目录保存了ColdFusion JavaScript 文件,包含了带有客户端JavaScript的 cfform.js 文件,而该JavaScript给这个标签和他的字标签是由的。对于XML格式的表单,这个目录也是XSLT皮肤的默认目录。 当你使用这个属性的时候,指定的目录必须有和 /CFIDE/scripts 目录同样的结构。举个例子说,如果你指定了 scriptsrc="/resources/myScripts",ColdFusion AJAX 功能是由的 JavaScript 文件就必须在 /resources/myScripts/ajax 目录里。. 如果这个文件不在默认的地方,该属性就很有用。这个属性可以在一些主机环境和配置环境里使用,而配置可以进入 /CFIDE 目录。 位置设在 ColdFusion Administrator;默认,是 /CFIDE/scripts。 注意: 如果你指定了这个属性,你就必须从CFIDE/scripts 目录复制CF_RunActiveContent.js 给指定的目录。 你可以一个页面只有一个scriptsrc 属性,包括了所有的 cfajaximport 标签 scriptsrc 属性。如果你有多个 cfform 标签,你可以在一个cfajaximport标签里 指定scriptsrc 属性,它适用于所有的HTML格式表单。 |
|
skin |
Flash XML |
可选 |
Flash: haloGreen XML: default.xsl |
Flash: 使用一个晕圈光环颜色来改变输出的外观。皮肤定义了颜色,用来突出或者选择元素。
XML: 指定了是否适用于一个XSL皮肤,是否显示结果 HTML 给客户端。可以是以下:
你可以指定下面的ColdFusion皮肤(位置在 cf_webroot\CFIDE\scripts\xsl 目录):
文件名可以如下:
|
|
style |
HTML, Flash, XML |
可选 |
|
适用于表单的类型,以HTML或XML的格式,ColdFusion传递了类型属性给浏览器或者XML 以 Flash 的格式,必须是CSS格式的一种类型指定。更多指定Flash类型的信息,请看 ColdFusion Developer's Guide的 "Creating Forms in Flash" 。 |
|
timeout |
Flash |
可选 |
0 |
秒数的整数,在服务器上保持Flash缓存里的表单数据的时间长度。如果值是0,就可以避免数据被存储。更多信息,请看ColdFusion Developer's Guide的 "Caching data in Flash forms" 。 |
|
width |
Flash XML |
可选 |
100% |
表单的宽。使用一个数据来指定像素。在 Flash里面,你可以使用一个百分值,比如说"width=60%" 来指定可用的宽度。 注意:如果用在一个表格里,width和height属性是Flash表单所要求的。 |
|
wMode |
Flash |
可选 |
window |
指定Flash表单在一个HTML页面里遇到同一个部分时如何显示其它相关地可显示内容。
|
注意:在XML支持的属性里没有标记的属性不是由皮肤处理的,而皮肤是由ColdFusion提供的。他们,虽然,包含在产生的XML里,作为HTML命名属性给form标签。
这个标签要求一个结束标签。
你可以使用下列的ColdFusion表单来控制 cfform标签里的标签:
以HTML格式,所有的标签和Flash格式的cftree和cfgrid标签,都要求浏览器上支持JavaScript。cfapplet 标签和applet格式 cfgrid, cfslider, 和 cftree标签要求客户端下载一个Java applet。
如果你在cfform标签指定了Flash格式,ColdFusion会忽视表单主体里任何的HTML。你必须使用ColdFusion标签为所有的表单控件。你可以在一个HTML格式的cfform标签里包含个人的Flash格式的cfgrid和cftree控件。
以 Flash 的格式,如果你的forms没有要求敏感的数据(比如信用卡号码),就要考虑设置 timeout属性。这样可以避免用户被提示“该表单数据已过期,请在你的浏览器重装该页面”的错误,如果用户使用的浏览器返回键是返回表单的话。更多信息,请看ColdFusion Developer's Guide.的"Caching data in Flash forms" in "Caching data in Flash forms"
注意:以Flash的格式,如果你没有指定高和宽属性,Flash储存的浏览器空间和浏览器窗口是一样大的。如果任何其它的输出都遵循这个表单,用户就必须滚动察看。这样的话,如果你遵循一个带有附加输入的Flash表单,那就要指定高和宽的值。高和宽的属性是Flash表单要求的,如果他们在表格里使用的话。
如果属性值文本必须包含引用标志,双写它们即可跳过。
如果你使用了onSubmit或onBlur验证,如果用户试图提交一个带有有效错误的Flash表单,onError属性就会让你指定 ActionScript代码来处理。如下:
你的ActionScript可以使用错误变量来定义域和错误。错误对象有以下的域:
|
Field |
内容 |
|---|---|
|
name |
控件的CFML标签的命名属性。 |
|
field |
Flash用来做域名称的内部名称(比如说,level0.field1) |
|
value |
域变量里的值 |
|
message |
控件的CFML标签的message属性。 |
下面的例子展示了用onError属性的cfform标签在accordion组件标签或包含名字域无效入口的导航标签页:
<cfform name="form1" format="flash" width="800" height="500"
onError="if (errors['lastName'] != undefined
){tabA.selectedIndex=0; _root.lastName.setFocus();}">
用HTML格式,cfform 标签可以让你纳入下列的标准HTML元素。他们在Flash格式里不可用。
<cfform>
<input type = "Submit" value = " update... ">
</cfform>
在cfdiv, cflayout, cffpod和cfwindow控件里使用表单
e cfdiv, cflayout, cffpod和cfwindow 标签创建了基于AJAX的控件,而基于AJAX的控件可以用作互动表单的容器。当你使用这样一个结构的时候,你不可以试图让提交的表单信息促成一个新的页面来展示,相反地,你可以用动态的代码修改现存的页面,而不会导致一个完成的重载。你可以用onSuccess和onError属性来促成这个动作。
如果表单数据成功提交,用onSuccess属性指定的函数就会被调用。该函数负责更新容器,或者窗口反映提交的结果。举个例子,可以展示附加的数据或者跳出一个确认窗口。该函数不必要有任何参数。
如果一个错误发生在表单数据提交的时候,用onError属性指定的函数被调用。该函数是负责捕捉错误,比如说显示一条错误信息。该函数必须有两个参数:一个错误号码和一条错误信息。
ColdFusion 8 让你使用cfform标签来创建包含了静态和互动的表单域的PDF表单。这个cfform标签必须存在于一个cfdocument标签内(这里format="pdf")。只有一个cfform标签可以存在于cfdocument标签。
完成的表单可以以一个HTTP Post的形式传递给服务器,或者整个PDF可以以二进制流的形式提交。如果PDF已经提交,你可以使用cffile标签拉力保存完成的PDF表单到硬盘。
<cffile action="write" file="c:\savedpdf.pdf" output="#PDF.content#">
输出可以通过使用该标签来操纵并摘录。
只有以下的 cfform 属性支持产生PDF表单:
插入一个现存的用LiveCycle Designer或Acrobat产生的PDF表单,可以使用这个标签。T
<h3>cfform Example</h3>
<!--- If Form.oncethrough exists, the form has been submitted. --->
<cfif IsDefined("Form.oncethrough")>
<cfif IsDefined("Form.testVal1")>
<h3>Results of Radio Button Test</h3>
<cfif Form.testVal1>Your radio button answer was yes
<cfelse>Your radio button answer was no
</cfif>
</cfif>
<h3>Results of Checkbox Test</h3>
<cfif IsDefined("Form.chkTest2")>
Your checkbox answer was yes
<cfelse>
Your checkbox answer was no
</cfif>
<cfif IsDefined("Form.textSample") AND Form.textSample is not "">
<h3>Results of Credit Card Input</h3>
Your credit card number, <cfoutput>#Form.textSample#</cfoutput>,
was valid under the MOD 10 algorithm.
</cfif>
<cfif IsDefined("Form.sampleSlider")>
<cfoutput>
<h3>You gave this page a rating of #Form.sampleSlider#</h3>
</cfoutput>
</cfif>
<hr noshade="True">
</cfif>
<!--- Begin by calling the cfform tag. --->
<cfform name="cfformexample">
<h4>This example displays radio button input type for cfinput.</h4>
Yes <cfinput type = "Radio" name = "TestVal1" value = "Yes" checked>
No <cfinput type = "Radio" name = "TestVal1" value = "No">
<h4>This example displays checkbox input type for cfinput.</h4>
<cfinput type = "Checkbox" name = "ChkTest2" value = "Yes">
<h4>This shows client-side validation for cfinput text boxes.</h4>
(<i>This item is optional</i>)<br>
Please enter a credit card number:
<cfinput type = "Text" name = "TextSample"
message = "Please enter a Credit Card Number"
validate = "creditcard" required = "No">
<h4>This example shows the use of the cfslider tag.</h4>
Rate your approval of this example from 1 to 10 by sliding control.<br>
1 <cfslider name = "sampleSlider" width="100"
label = "Page Value: " range = "1,10"
message = "Please enter a value from 1 to 10"> 10
<p><cfinput type = "submit" name = "submit" value = "show me the result">
<cfinput type = "hidden" name = "oncethrough" value = "Yes"></p>
</cfform>
下面的例子展示了一个简单的XML格式的表单。它使用了default.xsl转化使ColdFusion支持显示在生成的HTML输出中:
<cfform name="testXForm" format="XML" skin="basic">
<!--- Use cfformgroup to put the first and last names on a single line. --->
<cfformgroup type="horizontal">
<cfinput type="text" name="firstname" label="First Name:" value="Robert">
<cfinput type="text" name="lastname" label="Last Name:" value="Smith">
</cfformgroup>
<cfinput type="password" name="password" label="Password:" value="">
<cfinput type="hidden" name="hidden" label="hidden:" value="">
<cfselect name="state" style="width:200" label="State">
<option>California</option>
<option selected>Utah</option>
<option>Iowa</option>
<option selected>New York</option>
</cfselect>
<cftextarea name="description" label="Description:" rows="5" cols="40">
this is sample text.</cftextarea>
</cfform>
<cfdocument format="pdf">
<cfdocumentsection ../>
...
...
<cfform type="html/xform">
<cfinput type="textbox" name="employeeName" value="#fullName#" readonly="true">
<cfinput type="textbox" name="employeeID" value="#id#" readonly>
<cfselect name="contributionPercentage" options="#optionsStruct#" required="true">
<cfinput type="submit" name="SubmitAsHTTPPost">
<cfinput type="submit" name="SubmitAsPDF" submitType="PDF">
</cfform>
...
...
<cfdocumentsection ../>
</cfdocument>