ActionScript 3.0, harici kaynaklardan veri yüklenmesine yönelik mekanizmalar içerir. Bu kaynaklar metin dosyaları gibi statik içerik veya bir web komut dosyası tarafından oluşturulan dinamik içerik olabilir. Veriler çeşitli yollarla biçimlendirilebilir ve ActionScript verilere ilişkin kod çözme ve erişim işlevleri sağlar. Veri alma işleminin parçası olarak, harici sunucuya veri de gönderebilirsiniz.
URLRequest sınıfını kullanma
Harici veri yükleyen çoğu API, gerekli ağ talebinin özelliklerini tanımlamak için URLRequest sınıfını kullanır.
URLRequest özellikleri
Bir URLRequest nesnesinin aşağıdaki özelliklerini her güvenlik sanal alanında ayarlayabilirsiniz:
Özellik
|
Açıklama
|
contentType
|
URL isteğiyle gönderilen her verinin MIME içerik türü. Herhangi bir contentType ayarlanmazsa, değerler
application/x-www-form-urlencoded
olarak gönderilir.
|
data
|
URL isteği ile aktarılacak olan verileri içeren bir nesne.
|
digest
|
Adobe® Flash® Player önbelleğine saklanacak (veya buradan alınacak) imzalanmış Adobe platformu bileşenini benzersiz şekilde tanımlayan bir dize.
|
method
|
Bir GET veya POST gibi HTTP istek yöntemi. (AIR uygulama etki alanında çalışan içerik,
"GET"
veya
"POST"
dışındaki dizeleri
method
özelliği olarak belirleyebilir. Tüm HTTP fiilleri olanaklıdır ve
"GET"
varsayılan yöntemdir. Bkz.
AIR güvenliği
.)
|
requestHeaders
|
HTTP istemine eklenecek HTTP istem başlıkları. Flash Player’da ve uygulama güvenliği sanal alanı dışında çalışan AIR içeriğinde bazı başlıkların ayarlanmasına yönelik izinlerin sınırlandırıldığını unutmayın.
|
url
|
İstenecek URL'yi belirtir.
|
AIR’de, URLRequest sınıfının yalnızca uygulama güvenliği sanal alanında çalışan AIR içeriğinin kullanabileceği ek özelliklerini ayarlayabilirsiniz. Uygulama sanal alanındaki içerik, yeni URL şemalarını (
file
ve
http
gibi standart şemalara ek olarak) kullanarak URL’leri de tanımlayabilir.
Özellik
|
Açıklama
|
followRedirects
|
Yeniden yönlendirmelerin takip edilip (
true
, varsayılan değer) edilmeyeceğini (
false
) belirtir. Bu yalnızca AIR uygulama sanal alanında desteklenir.
|
manageCookies
|
HTTP protokol yığınının bu istek için tanımlama bilgilerini yönetmesi gerekip (
true
, varsayılan değer) gerekmediğini (
false
) belirtir. Bu özelliği ayarlamak yalnızca AIR uygulama sanal alanında desteklenir.
|
authenticate
|
Kimlik doğrulama isteklerinin bu istek için işlenmesi gerekip (
true
) gerekmediğini belirtir. Bu özelliği ayarlamak yalnızca AIR uygulama sanal alanında desteklenir. Varsayılan, istekler için kimlik doğrulaması yapmaktır—sunucu kimlik bilgilerini gerektiriyorsa bu, kimlik doğrulama iletişim kutusunun görüntülenmesine neden olabilir. URLRequestDefaults sınıfını kullanarak kullanıcı adı ve şifreyi de ayarlayabilirsiniz—bkz.
URLRequest varsayılanlarını ayarlama (yalnızca AIR)
.
|
cacheResponse
|
Bu isteğe ilişkin yanıt verilerinin önbelleğe alınması gerekip gerekmediğini belirtir. Bu özelliği ayarlamak yalnızca AIR uygulama sanal alanında desteklenir. Varsayılan, yanıtı önbelleğe almaktır (
true
).
|
useCache
|
Bu URLRequest verileri almadan önce, yerel önbelleğe başvurulması gerekip gerekmediğini belirler. Bu özelliği ayarlamak yalnızca AIR uygulama sanal alanında desteklenir. Varsayılan (
true
), kullanılabiliyorsa yerel önbelleğe alınmış sürümü kullanmaktır.
|
userAgent
|
HTTP isteğinde kullanılacak kullanıcı aracısı dizesini belirtir.
|
Not:
HTMLLoader sınıfı, HTMLLoader nesnesi tarafından yüklenen içeriğe ait ayarlara ilişkin özellikler içerir. Ayrıntılar için bkz.
HTMLLoader sınıfı hakkında
.
URLRequest varsayılanlarını ayarlama (yalnızca AIR)
URLRequestDefaults sınıfı URLRequest nesneleri için uygulamaya özel varsayılan ayarlarını tanımlamanızı sağlar. Örneğin, aşağıdaki kod
manageCookies
ve
useCache
özellikleri için varsayılan değerleri ayarlar. Tüm yeni URLRequest nesneleri normal varsayılanlar yerine bu özellikler için belirtilen değerleri kullanır:
URLRequestDefaults.manageCookies = false;
URLRequestDefaults.useCache = false;
Not:
URLRequestDefaults sınıfı Adobe AIR uygulamasında çalışan içerik için tanımlanır. Bu Flash Player'da desteklenmez.
URLRequestDefaults sınıfı, belirli bir ana bilgisayar için kullanmak üzere varsayılan bir kullanıcı adı ve parola belirlemenizi sağlayan
setLoginCredentialsForHost()
yöntemini içerir. Yöntemin hostname parametresinde tanımlanan ana bilgisayar,
"www.example.com"
gibi bir etki alanı veya
"www.example.com:80"
gibi bir etki alanı ve bir bağlantı noktası numarası olabilir.
"example.com"
,
"www.example.com"
ve
"sales.example.com"
öğelerinden her birinin benzersiz ana bilgisayarlar olarak dikkate alındığını unutmayın.
Bu kimlik bilgileri, yalnızca sunucu onları istediğinde kullanılır. Kullanıcı kimliği doğrulanmışsa (örneğin, kimlik doğrulama iletişim kutusunu kullanarak),
setLoginCredentialsForHost()
yöntemini çağırmak, doğrulanmış kullanıcıyı değiştirmez.
Aşağıdaki kod, www.example.com adresine gönderilen taleplerde kullanılacak varsayılan kullanıcı adı ve şifreyi belirler:
URLRequestDefaults.setLoginCredentialsForHost("www.example.com", "Ada", "love1816$X");
URLRequestDefaults ayarları bir istisna haricinde yalnızca geçerli uygulama etki alanı için geçerlidir.
setLoginCredentialsForHost()
yöntemine aktarılan kimlik bilgileri, AIR uygulaması içindeki herhangi bir uygulama etki alanında yapılan talepler için kullanılır.
Daha fazla bilgi için,
Adobe Flash Platformu için ActionScript 3.0 Başvurusu
'ndaki URLRequestDefaults sınıfına bakın.
URI şemaları
Aşağıdaki gibi standart URI şemaları herhangi bir güvenlik sanal alanından yapılan taleplerde kullanılabilir:
http: ve https:
Standart İnternet URL’leri için bunları kullanın (bir web tarayıcısında kullanıldıkları şekilde).
file:
Yerel dosya sisteminde bulunan bir dosyanın URL’sini belirtmek için
file:
kullanın. Örneğin:
file:///c:/AIR Test/test.txt
AIR’de, uygulama güvenlik sanal alanında çalışan içeriğe ilişkin URL’yi tanımlarken aşağıdaki şemaları da kullanabilirsiniz:
app:
Yüklü uygulamanın kök dizinine ilişkin bir yol belirlemek için
app:
öğesini kullanın. Örneğin, aşağıdaki yol yüklenen uygulama dizininin kaynaklar alt dizinine işaret eder:
app:/resources
Bir AIR uygulaması AIR Debug Launcher (ADL) kullanılarak başlatıldığında, uygulama dizini uygulama açıklayıcı dosyasını içeren dizindir.
File.applicationDirectory
öğesi ile oluşturulan bir File nesnesi URL'si (ve
url
özelliği),
app
URI şemasını aşağıdaki gibi kullanır:
var dir:File = File.applicationDirectory;
dir = dir.resolvePath("assets");
trace(dir.url); // app:/assets
app-storage:
Uygulamanın saklama dizinine ilişkin bir yol belirlemek için
app-storage:
öğesini kullanın. AIR her yüklenen uygulama için (ve kullanıcı), o uygulamaya özgü verilerin saklanmasına yönelik kullanışlı bir yer olan benzersiz bir uygulama depolama dizini tanımlar. Örneğin aşağıdaki yol, uygulama depolama dizininin ayarlar alt dizininde bulunan bir prefs.xml dosyasını işaret eder:
app-storage:/settings/prefs.xml
File.applicationStorageDirectory
kullanılarak oluşturulan bir File nesnesine ilişkin URL (ve
url
özelliği)
app-storage
URI şemasını aşağıdaki şekilde kullanır:
var prefsFile:File = File.applicationStorageDirectory;
prefsFile = prefsFile.resolvePath("prefs.xml");
trace(dir.prefsFile); // app-storage:/prefs.xml
mailto:
navigateToURL()
işlevine aktarılan URLRequest nesnelerindeki mailto şemasını kullanabilirsiniz. Bkz.
Başka bir uygulamada URL açma
.
FileStream veya Sound nesnesi gibi çeşitli nesnelere ilişkin URL isteği tanımlamak için bu URI şemalarından birini kullanan bir URLRequest nesnesini kullanabilirsiniz. Bu şemaları AIR'de çalışan HTML içeriğinde de kullanabilirsiniz; örneğin, bir
img
etiketinin
src
niteliğinde kullanabilirsiniz.
Ancak, AIR’ye özgü bu URL şemalarını (
app:
ve
app-storage:
) yalnızca uygulama güvenlik sanal alanındaki içerikte kullanabilirsiniz. Daha fazla bilgi için bkz.
AIR güvenliği
.
URL değişkenlerini ayarlama
Değişkenleri URL dizesine doğrudan ekleyebilmenize rağmen, bir talep için gereken herhangi bir değişkeni tanımlamak için URLVariables sınıfını kullanmak daha kolay olabilir.
Bir URLVariables nesnesine parametre eklemenin üç yolu vardır:
Aşağıdaki örnekte üç yöntem de gösterilmekte ve bir URLRequest nesnesine nasıl değişken atanacağı örneklendirilmektedir:
var urlVar:URLVariables = new URLVariables( "one=1&two=2" );
urlVar.decode("amp=" + encodeURIComponent( "&" ) );
urlVar.three = 3;
urlVar.amp2 = "&&";
trace(urlVar.toString()); //amp=%26&2=%26%26&one=1&two=2&three=3
var urlRequest:URLRequest = new URLRequest( "http://www.example.com/test.cfm" );
urlRequest.data = urlVar;
Değişkenleri URLVariables yapıcısı içinde veya
URLVariables.decode()
yönteminde tanımlarken, bir URI dizesinde özel bir anlamı olan karakterleri URL kodlamasına tabi tuttuğunuzdan emin olun. Örneğin, bir parametre adı ya da değerde ampersan kullandığınızda, ampersanı
&
’den
%26
’ya değiştirerek kodlamanız gerekir, çünkü ampersan parametreler için bir sınırlayıcı olarak hareket eder. En üst seviye
encodeURIComponent()
işlevi bu amaçla kullanılabilir.
URLLoader sınıfını kullanma
URLLoader sınıfı, bir sunucuya talep göndermenize ve verilen bilgilere ulaşmanıza izin verir. URLLoader sınıfını yerel dosya erişimine izin verilen bağlamlardaki (Flash Player dosya sistemiyle yerel sanal alanı ve AIR uygulaması sanal alanı gibi) yerel dosya sistemi üzerinde bulunan dosyalara erişmek için de kullanabilirsiniz. URLLoader sınıfı bir URL'den metin, ikili veri veya URL olarak kodlanmış değişkenler olarak veri indirir. URLLoader sınıfı
complete
,
httpStatus
,
ioError
,
open
,
progress
ve
securityError
gibi olaylar gönderir.
ActionScript 3.0 olay işleme modeli,
LoadVars.onData
,
LoadVars.onHTTPStatus
ve
LoadVars.onLoad
olay işleyicilerini kullanan ActionScript 2.0 modelinden büyük ölçüde farklıdır. ActionScript 3.0’da olayları işleme hakkında daha fazla bilgi edinmek için bkz.
Olayları işleme
İndirilen veriler, indirme işlemi tamamlanana kadar kullanılamaz.
progress
olayının gönderilmesini dinleyerek indirmenin ilerlemesini (yüklenen baytlar ve toplam bayt) denetleyebilirsiniz. Ancak, bir dosya yeterince hızlı yüklenirse
progress
olayı gönderilmeyebilir. Bir dosya başarıyla yüklendiğinde
complete
olayı gönderilir. URLLoader
dataFormat
özelliğini ayarlayarak, verileri metin, ham ikili veri veya bir URLVariables nesnesi olarak alabilirsiniz.
URLLoader.load()
yöntemi (ve isteğe bağlı olarak URLLoader sınıfının yapıcısı), URLRequest nesnesi olan tek bir parametre (
request
) alır. URLRequest nesnesi, hedef URL, istek yöntemi (
GET
veya
POST
), ek başlık bilgileri ve MIME türü gibi tek bir HTTP isteğinin tüm bilgilerini içerir.
Örneğin, sunucu tarafı komut dosyasına bir XML paketi yüklemek için aşağıdaki kodu kullanabilirsiniz:
var secondsUTC:Number = new Date().time;
var dataXML:XML =
<clock>
<time>{secondsUTC}</time>
</clock>;
var request:URLRequest = new URLRequest("http://www.yourdomain.com/time.cfm");
request.contentType = "text/xml";
request.data = dataXML.toXMLString();
request.method = URLRequestMethod.POST;
var loader:URLLoader = new URLLoader();
loader.load(request);
Önceki kod parçası, sunucuya gönderilecek XML paketini içeren
dataXML
adında bir XML örneği oluşturur. Örnek, URLRequest
contentType
özelliğini
"text/xml"
olarak ayarlar ve XML belgesini URLRequest
data
özelliğine atar. Son olarak, örnek bir URLLoader nesnesi oluşturup
load()
yöntemini kullanarak uzak komut dosyasına talebi gönderir.
URLStream sınıfını kullanma
URLStream sınıfı indirme verileri geldiğinde bu verilere erişim sağlar. URLStream sınıfı ayrıca, indirmeyi tamamlamadan önce bir akışı kapatmanıza olanak verir. İndirilen veri, ham ikili veri olarak mevcuttur.
Bir URLStream nesnesinden veri okurken, okumadan önce yeterli verinin olup olmadığını belirlemek için
bytesAvailable
özelliğini kullanın. Mevcut olandan daha fazla veri okumaya çalışırsanız, EOFError istisnası atılır.
httpResponseStatus olayı (AIR)
Adobe AIR’de, URLStream sınıfı
httpStatus
olayına ek olarak bir
httpResponseStatus
olayı gönderir.
httpResponseStatus
olayı herhangi bir yanıt verisinden önce ulaştırılır.
httpResponseStatus
olayı (HTTPStatusEvent sınıfıyla ifade edilen), yanıtın döndüğü kaynak URL olan
responseURL
özelliğini ve yanıtın döndürdüğü yanıt başlıklarını temsil eden URLRequestHeader nesnesinin bir dizisi olan
responseHeaders
özelliğini içerir.
Harici belgelerden veri yükleme
Dinamik uygulamalar oluşturduğunuzda, harici dosyalardan veya sunucu tarafı komut dosyalarından veri yüklemek faydalı olabilir. Bu, uygulamanızı düzenlemeniz veya yeniden derlemeniz gerekmeden dinamik uygulamalar oluşturmanıza olanak sağlar. Örneğin, bir “günün ipucu” uygulaması oluşturuyorsanız, bir veritabanından rastgele bir ipucunu alıp her gün bir metin dosyasına kaydeden sunucu tarafı komut dosyası yazabilirsiniz. Daha sonra uygulamanız, her seferinde veritabanını sorgulamak yerine statik metin dosyasının içeriklerini yükleyebilir.
Aşağıdaki kod parçası, params.txt adında harici bir metin dosyasının içeriklerini yükleyen bir URLRequest ve URLLoader nesnesi oluşturur:
var request:URLRequest = new URLRequest("params.txt");
var loader:URLLoader = new URLLoader();
loader.load(request);
Varsayılan olarak, bir istek yöntemi tanımlamazsanız, Flash Player ve Adobe AIR uygulaması HTTP
GET
yöntemini kullanarak içeriği yükler. Verileri
POST
yöntemini kullanarak göndermek için, aşağıdaki kodun gösterdiği gibi
URLRequestMethod.POST
statik sabitini kullanarak
request.method
özelliğini
POST
olarak ayarlayın:
var request:URLRequest = new URLRequest("sendfeedback.cfm");
request.method = URLRequestMethod.POST;
Çalışma zamanında yüklenen params.txt harici belgesi aşağıdaki verileri içerir:
monthNames=January,February,March,April,May,June,July,August,September,October,November,December&dayNames=Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday
Dosya iki parametre içerir,
monthNames
ve
dayNames
. Her parametre, virgülle ayrılmış dizeler halinde ayrıştırılmış bir liste içerir.
String.split()
yöntemini kullanarak bu listeyi bir diziye ayrıştırabilirsiniz.
Harici veri dosyalarında değişken adı olarak ayrılmış sözcükleri veya dil yapılarını kullanmayın, aksi takdirde bu, kodunuzun okunmasını ve hatalarının ayıklanmasını daha güçleştirir.
Veriler yüklendiğinde
complete
olayı gönderilir ve aşağıdaki kodun gösterdiği gibi, harici belgenin içindekiler URLLoader
data
özelliğinde kullanıma hazırdır:
function completeHandler(event)
{
var loader2 = event.target;
air.trace(loader2.data);
}
Uzak belge ad-değer çiftleri içeriyorsa, yüklenen dosyanın içeriğini aşağıdaki gibi ileterek URLVariables sınıfı aracılığıyla verileri ayrıştırabilirsiniz:
private function completeHandler(event:Event):void
{
var loader2:URLLoader = URLLoader(event.target);
var variables:URLVariables = new URLVariables(loader2.data);
trace(variables.dayNames);
}
Harici dosyadan her ad-değer çifti URLVariables nesnesinde bir özellik olarak oluşturulmuştur. Önceki kod örneğinde yer alan değişkenler nesnesindeki her özellik, bir dize olarak değerlendirilir. Ad-değer çiftinin değeri bir öğeler listesiyse, dizeyi aşağıdaki gibi
String.split()
yöntemini çağırarak bir diziye dönüştürebilirsiniz:
var dayNameArray:Array = variables.dayNames.split(",");
Harici metin dosyalarından sayısal veriler yüklüyorsanız,
int()
,
uint()
veya
Number()
gibi bir üst düzey işlev kullanarak değerleri sayısal değerlere dönüştürün.
Uzak dosyanın içeriklerini bir dize olarak yükleyip yeni bir URLVariables nesnesi oluşturmak yerine,
URLLoader.dataFormat
özelliğini URLLoaderDataFormat sınıfında bulunan statik özelliklerden birine ayarlayabilirsiniz.
URLLoader.dataFormat
özelliği için üç olası değer şunlardır:
-
URLLoaderDataFormat.BINARY
—
URLLoader.data
özelliği, bir ByteArray nesnesinde saklanan ikili verileri içerir.
-
URLLoaderDataFormat.TEXT
—
URLLoader.data
özelliği, bir String nesnesinde metin içerir.
-
URLLoaderDataFormat.VARIABLES
—
URLLoader.data
özelliği, bir URLVariables nesnesinde saklanan URL olarak kodlanmış değişkenleri içerir.
Aşağıdaki kod,
URLLoader.dataFormat
özelliğinin
URLLoaderDataFormat.VARIABLES
olarak ayarlanmasının, yüklenen verileri nasıl otomatik olarak bir URLVariables nesnesine ayrıştırmanıza olanak sağladığını gösterir:
package
{
import flash.display.Sprite;
import flash.events.*;
import flash.net.URLLoader;
import flash.net.URLLoaderDataFormat;
import flash.net.URLRequest;
public class URLLoaderDataFormatExample extends Sprite
{
public function URLLoaderDataFormatExample()
{
var request:URLRequest = new URLRequest("http://www.[yourdomain].com/params.txt");
var variables:URLLoader = new URLLoader();
variables.dataFormat = URLLoaderDataFormat.VARIABLES;
variables.addEventListener(Event.COMPLETE, completeHandler);
try
{
variables.load(request);
}
catch (error:Error)
{
trace("Unable to load URL: " + error);
}
}
private function completeHandler(event:Event):void
{
var loader:URLLoader = URLLoader(event.target);
trace(loader.data.dayNames);
}
}
}
Not:
URLLoader.dataFormat
için varsayılan değer
URLLoaderDataFormat.TEXT
şeklindedir.
Aşağıdaki örneğin gösterdiği gibi, harici bir dosyadan XML yüklemek, URLVariables yüklemekle aynıdır. Bir URLRequest örneği ile bir URLLoader örneği oluşturabilir ve bunları uzak bir XML belgesini indirmek için kullanabilirsiniz. Dosya tamamen indirildiğinde,
Event.COMPLETE
olayı gönderilir ve harici dosyanın içerikleri, XML yöntemlerini ve özelliklerini kullanarak ayrıştırabileceğiniz bir XML örneğine dönüştürülür.
package
{
import flash.display.Sprite;
import flash.errors.*;
import flash.events.*;
import flash.net.URLLoader;
import flash.net.URLRequest;
public class ExternalDocs extends Sprite
{
public function ExternalDocs()
{
var request:URLRequest = new URLRequest("http://www.[yourdomain].com/data.xml");
var loader:URLLoader = new URLLoader();
loader.addEventListener(Event.COMPLETE, completeHandler);
try
{
loader.load(request);
}
catch (error:ArgumentError)
{
trace("An ArgumentError has occurred.");
}
catch (error:SecurityError)
{
trace("A SecurityError has occurred.");
}
}
private function completeHandler(event:Event):void
{
var dataXML:XML = XML(event.target.data);
trace(dataXML.toXMLString());
}
}
}
Harici komut dosyalarıyla iletişim kurma
Harici veri dosyaları yüklemenin yanı sıra, sunucu tarafı komut dosyasına değişkenler gönderip sunucunun yanıtını işlemek için de URLVariables sınıfını kullanabilirsiniz. Bu örneğin, bir oyun programlıyor ve kullanıcının puanını yüksek puanlar listesine eklenip eklenmeyeceğinin hesaplanması için sunucuya göndermek ve hatta kullanıcının oturum açma bilgilerini doğrulama için sunucuya göndermek istiyorsanız, kullanışlı bir özelliktir. Sunucu tarafı komut dosyası kullanıcı adı ve parolayı işleyebilir, veritabanına karşı doğrulayabilir ve kullanıcının girdiği kimlik bilgilerinin geçerli olup olmadığına ilişkin teyit döndürebilir.
Aşağıdaki kod parçası,
name
adında yeni bir değişken oluşturan
variables
adında bir URLVariables nesnesi oluşturur. Daha sonra, değişkenlerin gönderileceği sunucu tarafı komut dosyasının URL'sini belirten bir URLRequest nesnesi oluşturulur. Daha sonra, değişkenleri bir HTTP
POST
isteği olarak göndermek üzere URLRequest nesnesinin
method
özelliğini ayarlarsınız. URLVariables nesnesini URL isteğine eklemek için, URLRequest nesnesinin
data
özelliğini önceden oluşturulan URLVariables nesnesine ayarlarsınız. Son olarak, URLLoader örneği oluşturulur ve isteği başlatan
URLLoader.load()
yöntemi çağrılır.
var variables:URLVariables = new URLVariables("name=Franklin");
var request:URLRequest = new URLRequest();
request.url = "http://www.[yourdomain].com/greeting.cfm";
request.method = URLRequestMethod.POST;
request.data = variables;
var loader:URLLoader = new URLLoader();
loader.dataFormat = URLLoaderDataFormat.VARIABLES;
loader.addEventListener(Event.COMPLETE, completeHandler);
try
{
loader.load(request);
}
catch (error:Error)
{
trace("Unable to load URL");
}
function completeHandler(event:Event):void
{
trace(event.target.data.welcomeMessage);
}
Aşağıdaki kod, önceki örnekte kullanılan Adobe ColdFusion® greeting.cfm belgesinin içeriklerini barındırır:
<cfif NOT IsDefined("Form.name") OR Len(Trim(Form.Name)) EQ 0>
<cfset Form.Name = "Stranger" />
</cfif>
<cfoutput>welcomeMessage=#UrlEncodedFormat("Welcome, " & Form.name)#
</cfoutput>
|
|
|