1

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

4

2 回答 2

1

Brian Kotek 的 FormUtilities 非常适合这一点。我无法想象回到不对我构建的所有表单使用它:http ://www.briankotek.com/blog/index.cfm/2007/9/4/Implicit-Creation-of-Arrays-and-Structures -from-Form-Fields

于 2011-03-11T20:43:34.283 回答
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[]表单字段的循环。

附带说明一下,您还将了解提交按钮本身的循环。

于 2011-03-11T21:50:23.517 回答