在coldfusion 9中,如何在文本中正确提交包含“,”的表单文本输入数组?

时间:2011-03-11 20:22:45

标签: html coldfusion coldfusion-9

我想找到一个将下面的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的标准列表分隔符混合在一起的正确方法是什么?

2 个答案:

答案 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[]表单字段的循环传递。

作为旁注,您还将通过循环浏览提交按钮本身。