2010-11-29 7 views
1

J'ai repris un site hérité, et mon odeur de code spidey devient fou sur le paramming de formulaire utilisé dans tout le site. Par exemple, nous avons un formulaire qui vous permet d'ajouter un nouveau contact ou d'en modifier un existant en fonction de la présence de l'iContactId dans l'adresse URL. Donc, le code dans la partie supérieure du fichier cfm est.Form param pour les objets

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

donc essentiellement nous sommes tous Défaillant champs de formulaire à vide, puis les remplir si le iContactId est dans l'URL. Le formulaire dans la partie inférieure du fichier cfm utilise ces variables comme ceci.

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

Maintenant, pour moi, le problème avec ces techniques, est qu'il ya environ 30 champs de formulaire sur cette page, donc je suis parramming tous les champs de formulaire, puis définir les 30 champs de formulaire pour les objets de contact valeurs si la variable URL.iContactId existe. Je suis en train de penser à un moyen de supprimer cette duplication - peut-être en mappant le formulaire directement à l'objet?

Des idées?

Merci

Répondre

2

Je ne vois pas pourquoi. Obtenir getContact() pour retourner un objet "vide" pour l'ID de contact 0 et remplir le formulaire à partir de l'objet de contact vide. Par "vide", j'entends un objet avec des valeurs par défaut définies pour chaque champ.

par ex.

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

puis sous la forme.

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

La seule chose à savoir; Si vous effectuez une validation côté serveur qui vous renvoie à ce formulaire, vous devrez vous assurer que vous disposez d'un objet contact avec les données valides pour remplir votre formulaire, afin que les champs non valides puissent être corrigés.

+0

Salut, merci pour la réponse. Ouais semble être une bien meilleure méthode. Cependant, que faire si je devais param un champ de formulaire à quelque chose de spécifique, quand URL.iContactId n'existe pas. Par exemple, form.userSmokes = 0. En tant qu'objet de contact vide ne fournirait pas cette fonctionnalité. – namtax

+0

Deux choses: 1. J'utiliserais probablement pour l'ID par défaut; et 2. configurez votre méthode getContact() pour renvoyer un objet vide avec tous les paramètres par défaut déjà définis. – sebduggan

+0

alors getContact() retourne un objet spécifié? peut-être un objet de contact sous-classé? – namtax