我想找到一个将下面的html提交给cfc函数的最佳方法。
<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()'函数将在我的设置{mytext:"f,oo,bar"}
上返回此json,如果我取消注释插入代码,则会插入3行而不是2行。将用户输入的文本和coldfusion的标准列表分隔符混合在一起的正确方法是什么?
答案 0 :(得分:1)
Brian Kotek的FormUtilities非常适合这种情况。我无法想象回到我不会对我构建的所有表单使用它:http://www.briankotek.com/blog/index.cfm/2007/9/4/Implicit-Creation-of-Arrays-and-Structures-from-Form-Fields
答案 1 :(得分: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[]
表单字段的循环传递。
作为旁注,您还将通过循环浏览提交按钮本身。