2010-05-27 8 views
8

Ich habe keine Ahnung, wie damit in ColdFusion 9 umzugehen, ich habe ein Formular eingereicht (POST) mit Element-Kontrollkästchen, genannt items [].Mit Formular-Arrays in ColdFusion arbeiten?

Wenn ich ein <cfdump var="#form#" /> No-Problem zu tun, erhalte ich alle Einzelteile mit den richtigen Namen angezeigt wie items[] zB:

struct 
ITEMS[] 13,14 
FIELDNAMES ITEMS[] 

jedoch ein <cfdump var="#form.items[]#" /> führt zu einem Fehler zu tun. Wie greife ich auf die CF9-Feldwerte zu? Irgendwie durchschleifen?

Ich kann nichts mit dem Array tun, um die IDs daraus zu bekommen? Gedanken? Ich bin etwas ratlos und ColdFusion ist nicht die einfachste Sprache, um Beispiele/Referenzen im Internet zu finden. ;)

Gibt es einen richtigen Weg, damit umzugehen? Ich muss die IDs herausholen, damit ich auf die Zeilen verweisen kann, die im Formular überprüft wurden, damit ich eine Aktion verfolgen kann.

Danke!

Antwort

21

In ColdFusion gibt es keine Formular-Arrays. Mit '[]' am Ende macht es kein Array. Sie können wie folgt die Checkbox Werte von Form Umfang zuzugreifen:

FORM["ITEMS[]"] 

Dot Notation nicht ‚Ursache des '[]' funktioniert. Siehe: http://help.adobe.com/en_US/ColdFusion/9.0/Developing/WSc3ff6d0ea77859461172e0811cbec22c24-7fb2.html

Werte von Kontrollkästchen sind nur getrennte Werte Komma, die eine Liste in Coldfusion ist

Um Schleife durch sie verwenden cfloop list =:

<cfoutput> 
    <cfloop index="i" list="#FORM['ITEMS[]']#">  
    #i# 
    </cfloop> 
</cfoutput> 

, um eine Liste zu Array konvertieren, Verwenden Sie ListToArray(). Es gibt Listenfunktionen wie listGetAt(), aber wenn Sie viel zufälligen Zugriff tun, wäre es klüger, die Liste zuerst in ein Array zu konvertieren.

Gedanken, ich bin kindof ratlos und Coldfusion ist nicht die einfachste Sprache Beispiele finden/Referenzen auf dem net;)

+6

FWIW, PHP interpretiert Formularelemente mit einem "[]" als Array. CF behandelt gleichnamige Formularelemente als kommagetrennte Liste. –

+1

Was tun, wenn Ihre Eingabe ein Komma enthält ?! Gibt es einen Weg, um dem zu entkommen? – rkingon

+0

@rkingon nicht sicher, was Sie fragen. Bitte stellen Sie eine neue Frage. – Henry

2

Siehe auch die zweite Antwort here. Es beschreibt, wie Werte aus einem Feld mit mehreren Instanzen in einem Formular als Array abgerufen werden. Ich muss allerdings sagen, dass ich seit vielen Jahren in CFML arbeite, und das habe ich noch selbst gemacht oder in jeder App, an der ich gearbeitet habe. Ich denke, das ist nur deshalb so, weil das Vermeiden von Kommas sehr viel einfacher ist, aber wenn Sie es nicht so umgehen können oder wollen, ist es möglich.

2

Beachten Sie auch, dass in einer Ajax-Welt, wenn Sie JSON den gesamten Körper einer Post-Anfrage, anstatt einzelne Formularfelder codieren, kann es jede beliebige Datenstruktur, einfach auf dem Server abrufbar. Das folgende Snippet zeigt, wie Sie von ColdFusion aus darauf zugreifen können. Ich bin mir über andere Sprachen nicht sicher, aber es ist fast sicher möglich.

Um einen Beitrag wie diesen mit jQuery zu senden, JSON.string deine Daten vor der Weitergabe an jQuery, wie notiert here und here.

Wenn Sie eine eigene Ajax-Request Gebäude sind, wäre die Pointe sein:

xhr.send(JSON.stringify(data)); 

Um diese Daten auf der Server-Seite zugreifen, diese Coldfusion Beispiel sucht zuerst für diese Art json-codierte Post Körper, dann ein Beitrag mit JSON-Daten im Formularfeld "Eingabe", dann in einem URL-Feld mit dem gleichen Namen. In allen Fällen werden die resultierenden Daten deserialisiert und dem lokalen var 'input' zugewiesen, das Sie dann in den Anforderungsbereich, 'rc' oder was auch immer Ihr Code erwartet, eingeben können.

2

Mit Ihrer Liste, die IDs sind, funktioniert es gut, aber wenn Sie ein Array mit Kommas haben, dann stecken Sie fest.

In diesem Fall können Sie die Java-Methode getParameterValues ​​verwenden.

<cfdump var="#getPageContext().getRequest().getParameterValues('ITEMS')#"> 

Damit erhalten Sie ein Standard-CF-Array, das Sie verwenden können.

+0

Beachten Sie, dass dies bei mehrteiligen Formularen nicht funktioniert. In einem solchen Fall hat Java eine Methode mit dem Namen 'getPartsArray()' http://cfsearching.blogspot.ca/2010/02/form-field-values-multipart-forms-and.html – MPaul

0

Für Coldfusion 10 +, wenn Sie die sameformfieldsasarray Einstellung Ihrer Application.cfc wie folgt verwenden:

component { 
    this.name = "testingzone2c"; 
    this.sameformfieldsasarray=true; 
} 

Sie eine tatsächliche Array von Formularfeldern mit dem gleichen Namen.

ColdFusion 10 Missing Feature - Form Fields and Arrays

0

Ich schlage vor, dass Sie den „[]“ aus dem Namen zu entfernen, da es Punktnotation nicht zulässt, wie in einer anderen Antwort erwähnt .. Wenn mehr als ein Formularelement das gleiche name Attribut enthält, wird der Browser verketten all der Werte in eine durch Kommas getrennte Zeichenfolge beim Senden des Formulars. Glücklicherweise hat ColdFusion viele Funktionen, die eine getrennte Zeichenfolge als Liste behandeln. Sie können <cfloop> zusammen mit diesen Funktionen verwenden, um die Liste zu konsumieren.