Adobe ColdFusion 8

cfform

描述

用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>

注: 你可以在attributeCollection 中指定这个标签的属性,作为一个结构的value,在attributeCollection 中指定结构的名称,并使用这个标签的属性名称作为这个结构的Keys.

属性

下面的表格罗列了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

  • HTML: 生成一个HTML表单并把它发送给客户端。 cfgrid and cftree控件可以为Flash 或 applet 的格式
  • Flash: 生成一个Flash表单并把它发送给客户端。所有的控件都是Flash格式的。
  • XML: 生成 XForms规格的XML并把结果保存在用命名属性指定的变量里。默认的情况下, ColdFusion也适用于 XSL skin,并展示结果。更多信息,请看 skin 属性。

height

Flash

XML

可选

100%

表单的高度。用一个数字来指定像素。对于 Flash, 你可以使用一个百分比的数值,比如说 "height=60%" 来指定一个可用的宽度的百分数。这样展现的高度会比指定的大小要小一些。

注意: 高度和宽度的属性对于Flash表单来说是要求的,如果他们使用在一个表格里的话。

id

 

 

name attribute value

表单的HTML id

method

Flash

HTML

XML

可选

post

浏览器用来传递表单数据给服务器的方法:

  • post: 用HTTP post的方法发送数据。这个方法用一个单独的信息发送给服务器。
  • get: 用HTTP get 的方法发送数据,这个方法把表单变量的内容放在URL的问号字符串里。

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属性返回包含了表单的页面的时候,这个属性定义了是否撤消有提交的值的控件值。

  • no: 使用在控制标签属性里指定的值
  • yes: 使用相应提交的值。

适用于这些控件:

  • cfinput, cfslider, cftextinput:撤消属性的值。
  • cfselect控制了从 queries公布的表单:撤消selected 属性。请看 cfselect.
  • cftree 控制:撤消了 cftreeitem expand 属性。如果 yes的话, 扩展前次选择的元素。 cftree completePath 属性必须设置为 yes
  • cfgrid 控制: 没有影响 (这样避免了混乱因为数据已经被控件重新提交给数据库了。)

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: 使用一个晕圈光环颜色来改变输出的外观。皮肤定义了颜色,用来突出或者选择元素。

  • haloSilver
  • haloBlue
  • haloGreen
  • haloOrange

XML: 指定了是否适用于一个XSL皮肤,是否显示结果 HTML 给客户端。可以是以下:

  • ColdFusion skin name: 适用于指定皮肤。
  • XSL file name: 适用于指定路径的皮肤。
  • none:不适用于XSL皮肤。你的CFML 页面必须运行ColdFusion保存在用命名属性指定的变量里的XML , 并显示结果。
  • omitted or default: 使用 ColdFusion 默认皮肤。

你可以指定下面的ColdFusion皮肤(位置在 cf_webroot\CFIDE\scripts\xsl 目录):

  • basic
  • basiccss
  • beige
  • blue
  • bluegray
  • lightgray
  • red
  • silver

文件名可以如下:

  • 完整的URL地址
  • 相对于站点根目录的URL地址
  • 完整的文件路径
  • 在scripts文件夹里的文件名或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%" 来指定可用的宽度。

注意:如果用在一个表格里,widthheight属性是Flash表单所要求的。

wMode

Flash

可选

window

指定Flash表单在一个HTML页面里遇到同一个部分时如何显示其它相关地可显示内容。

  • window:Flash表单是页面上的最上层,掩盖了所有会分享空间的东西,比如说可拖动的动态HTML清单。
  • transparent:Flash表单支持DHTML的z-index,所以你可以把元素浮在上面。如果Flash表单在任何元素上面, 表单里面的透明区域就会展示它下面的内容。
  • opaque:Flash表单支持DHTML的z-index,所以你可以把元素浮在上面。如果Flash表单在所有的元素上面,它就遮盖住了所有它下面的内容。

注意:在XML支持的属性里没有标记的属性不是由皮肤处理的,而皮肤是由ColdFusion提供的。他们,虽然,包含在产生的XML里,作为HTML命名属性给form标签。

使用方法

这个标签要求一个结束标签。

你可以使用下列的ColdFusion表单来控制 cfform标签里的标签:

  • cfapplet:只在HTML和XML的格式里使用;嵌入一个注册的Java applet程序。
  • cfformgroup:只在Flash和XML格式里使用;组和排列子控件.
  • cfformitem: 只在Flash和XML格式里使用;添加了水平规则,垂直规则,和表单的文本。
  • cfgrid: 创建一个格控制来展示表格数据。
  • cfinput: 创建一个文本输入框元素。
  • cfselect: 创建一个下来列表框.
  • cfslider: 只在HTML和XML格式里使用;创建一个滑动控件
  • cftextarea: 创建一个多行文本输入框。
  • cftree: 创建一个树型控件。

以HTML格式,所有的标签和Flash格式的cftreecfgrid标签,都要求浏览器上支持JavaScript。cfapplet 标签和applet格式 cfgrid, cfslider, 和 cftree标签要求客户端下载一个Java applet。

如果你在cfform标签指定了Flash格式,ColdFusion会忽视表单主体里任何的HTML。你必须使用ColdFusion标签为所有的表单控件。你可以在一个HTML格式的cfform标签里包含个人的Flash格式的cfgridcftree控件。

以 Flash 的格式,如果你的forms没有要求敏感的数据(比如信用卡号码),就要考虑设置 timeout属性。这样可以避免用户被提示“该表单数据已过期,请在你的浏览器重装该页面”的错误,如果用户使用的浏览器返回键是返回表单的话。更多信息,请看ColdFusion Developer's Guide.的"Caching data in Flash forms" in "Caching data in Flash forms"

注意:以Flash的格式,如果你没有指定高和宽属性,Flash储存的浏览器空间和浏览器窗口是一样大的。如果任何其它的输出都遵循这个表单,用户就必须滚动察看。这样的话,如果你遵循一个带有附加输入的Flash表单,那就要指定高和宽的值。高和宽的属性是Flash表单要求的,如果他们在表格里使用的话。

如果属性值文本必须包含引用标志,双写它们即可跳过。

在Flash表单里使用onErrorUsing属性

如果你使用了onSubmit或onBlur验证,如果用户试图提交一个带有有效错误的Flash表单,onError属性就会让你指定 ActionScript代码来处理。如下:

  • 如果你指定了一个或者多个有效Flash表达式,Flash就会处理这些表达式。
  • 如果你忽略了这个属性,Flash就会显示一个带有所有适用的错误信息的对话框。
  • 如果你指定 onError="" (一个空的字符串) Flash 不会显示任何信息,但是不会提交表单。

你的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表单标签和属性。

用HTML格式,cfform 标签可以让你纳入下列的标准HTML元素。他们在Flash格式里不可用。

  • 标准的HTMLform标签属性和值。该属性和值都包含在form标签里,form标签在页面上 cfform输出。举个例子说,你可以像使用带有cfformtargetonMouseOver一样使用form标签属性。
  • HTML标签通常是放在 HTMLform标签里。譬如说,你可以使用 HTMLinput标签在一个cfform里创建一个提交按钮,而不需要cfinput的其它功能。
    <cfform>
        <input type = "Submit" value = " update... ">
    </cfform>
    

在cfdiv, cflayout, cffpod和cfwindow控件里使用表单

e cfdiv, cflayout, cffpodcfwindow 标签创建了基于AJAX的控件,而基于AJAX的控件可以用作互动表单的容器。当你使用这样一个结构的时候,你不可以试图让提交的表单信息促成一个新的页面来展示,相反地,你可以用动态的代码修改现存的页面,而不会导致一个完成的重载。你可以用onSuccessonError属性来促成这个动作。

如果表单数据成功提交,用onSuccess属性指定的函数就会被调用。该函数负责更新容器,或者窗口反映提交的结果。举个例子,可以展示附加的数据或者跳出一个确认窗口。该函数不必要有任何参数。

如果一个错误发生在表单数据提交的时候,用onError属性指定的函数被调用。该函数是负责捕捉错误,比如说显示一条错误信息。该函数必须有两个参数:一个错误号码和一条错误信息。

在PDF表单纳入互动域

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表单:

  • action
  • format
  • method
  • name
  • onSubmit
  • skin
  • style

插入一个现存的用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 form

下面的例子展示了一个简单的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>

一个简单的 PDF form


<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>