2010-11-29 57 views
1

我已經接管了一個遺留網站,並且我的spidey感覺代碼氣味對整個網站中使用的表單paramming感到瘋狂。對象的表單參數

例如,我們有一種表單,允許您添加新聯繫人,或者根據URL中存在的iContactId編輯現有聯繫人。所以cfm文件頂部的代碼是。

<cfparam name="form.name" default=""> 
<cfparam name="form.age" default=""> 
<cfparam name="form.surname" default=""> 
<--- More cfparams for every form field---> 

<cfif isDefined("URL.iContactId")> 
<cfset VARIABLES.contact = contactService.getContact("URL.iContactId")/> 
    <cfset FORM.name = contact.getName() /> 
    <cfset FORM.age= contact.getAge() /> 
    <cfset FORM.surname = contact.getSurname() /> 
</cfif> 

所以基本上我們拖欠的所有窗體字段爲空,然後填充它們如果iContactId是在URL中。 cfm文件底部的表單使用這些變量。現在

<form> 
    <input name="name" value="#FORM.name#"> 

,對我來說,這些技術問題,是有這個網頁上約30表單字段,所以如果我parramming所有表單域,然後設置30個表單字段聯繫人對象值URL.iContactId變量存在。我試圖想出一種方法來消除這種重複 - 也許通過將表單直接映射到對象?

任何想法?

謝謝

回答

2

不明白爲什麼不。

Get getContact()爲聯繫ID 0返回一個「空」對象,並從空聯繫對象中填充表單。通過「空」我的意思是爲每個字段設置默認值的對象。

例如。

if (!StructKeyExists(URL,"iContactID")) URL.iContactID = 0; 
variables.contact = contactService.getContact(URL.iContactID); 

然後在窗體中。

<input name="name" value="#contact.getName()#"> 

唯一要注意的事情;如果您正在進行服務器端驗證,將您返回到此表單,那麼您將需要管理確保您有一個聯繫對象及其中的有效數據來填充表單,以便糾正無效字段。

+0

嗨,謝謝你的回覆。好像是一個更好的方法。但是,如果我不得不將表單字段設置爲特定的內容,那麼當URL.iContactId不存在時。例如,form.userSmokes = 0.由於空的聯繫人對象不會提供此功能。 – namtax 2010-11-29 12:22:51