2011-03-11 24 views
1

我想找到將下面的html提交給cfc函數的最佳方法。in coldfusion 9,如何在文本中正確提交包含「,」的表單文本輸入數組?

<form action="test.cfc"> 
    <input type="hidden" name="method" value="save"> 
    <input type="text" name="mytext[]" value="f,oo"> 
    <input type="text" name="mytext[]" value="bar"> 
<input type="submit"> 
</form> 

test.cfc文件內容:

<cfcomponent displayname="test"> 
     <cffunction name="init"> 
     <cfreturn this> 
    </cffunction> 
    <cffunction name="save" output="false" returnformat="JSON" access="remote"> 
     <cfargument name="mytext" type="string" required="true"> 
     <!--- ***comments*** 
     i want to do this: 
     <cfloop list="arguments.mytext" index="curRowValue"> 
      <cfquery blah blah...> 
    insert into fooBar (stuff) values (curRowValue) 
</cfquery 
     </cfloop> 
     ---> 
     <cfreturn arguments> 
    </cffunction> 
    </cfcomponent> 

的'test.save()函數將返回此JSON在我的設置{mytext:"f,oo,bar"}這將插入3行,而不是2,如果我註釋掉插入碼。混淆用戶輸入的文本和ColdFusion的標準列表定界符的正確方法是什麼?

+0

這個問題是造成這個問題: http://stackoverflow.com/questions/5266522/on-keypress-event-how-do-i-change-a-to-a – DefyGravity 2011-03-11 20:26:09

回答

1

在處理程序中,如果您訪問ColdFusion窗體作用域本身,您已經看到CF會將同名表單域值減少到一個單一的鍵值對,其值與逗號無關地混合在一起。

但是,您還可以訪問原始請求數據並解析出鍵值對 - 無論是否存在鍵名衝突,每個鍵都是不同的。這裏有一個快速的方法來循環經歷的「實際」的網友值:

arFormscope = gethttprequestdata().content.split('&'); 
for(i=1; i<=arraylen(arFormscope); i++){ 
    arElement = arFormscope[i].split('='); 
    key = urldecode(arElement[1]); 
    value = urldecode(arElement[2]); 
    do_something_with(key, value); // <-- your logic here 
            // value == f,oo on first pass 
            // value == bar on second pass 
} 

有了您的樣本數據,你會通過迴路的每個mytext[]表單字段得到一通。

作爲一個方面說明,您還可以通過提交按鈕本身的循環訪問。

+0

我用替換了,並且返回的JSON中的「content」字符串爲空。在窗體提交中調用一個cfc函數要求cfc函數具有'access = remote'安全性。我相信Coldfusion正在解析表單並重新請求與「參數」範圍的函數。 – DefyGravity 2011-03-11 22:03:18

+0

我認爲你的想法會起作用,如果我改變了表單行爲後,像改變''form action =「fooBar.cfm」>他的回答 – DefyGravity 2011-03-13 00:45:22

+0

中提到的marc esher這樣的cfm頁面''我可以像你的解決方案一樣循環建議。不是一個'

解決方案,但是可以直接用於我們需要的東西。 – DefyGravity 2011-03-14 19:44:49

1

布賴恩Kotek的FormUtilities是完美的。我無法想象回到不使用這個我所建立的所有表單:http://www.briankotek.com/blog/index.cfm/2007/9/4/Implicit-Creation-of-Arrays-and-Structures-from-Form-Fields

+0

+1好主意,是一項體面的工作。然而,我需要將test.save()中的'arguments'結構傳遞給它還能工作嗎? – DefyGravity 2011-03-11 21:44:35

+1

您可以將save()更改爲一個結構,即。然後,在您的操作頁面上,這將是一個.cfm頁面而不是一個.cfc,您可以執行 2011-03-11 23:12:02

+0

marc,這個解決方案的工作原理和我喜歡它,但需要對現有的,舊的,塵土飛揚,可怕的代碼進行大量重構。與Ken的答案一起向後兼容 – DefyGravity 2011-03-14 19:43:54

相關問題