В Coldfusion 9, как я могу правильно отправить массивы ввода текста формы, содержащие "," в их тексте? - PullRequest
1 голос
/ 11 марта 2011

Я хочу найти лучший способ отправить 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 ()' вернет этот json в моей настройке {mytext:"f,oo,bar"}, который вставил бы 3 строки вместо 2, если я раскомментировал код вставки. Как правильно смешать введенный пользователем текст и стандартный разделитель списка Coldfusion?

Ответы [ 2 ]

1 голос
/ 12 марта 2011

В обработчике, если вы обращаетесь к самой области формы 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[].

В качестве примечания вы также получите цикл по самой кнопке отправки.

1 голос
/ 11 марта 2011

Brian Kotek FormUtilities идеально подходит для этого.Я не могу себе представить, чтобы вернуться к НЕ использовать это для всех форм, которые я строю: http://www.briankotek.com/blog/index.cfm/2007/9/4/Implicit-Creation-of-Arrays-and-Structures-from-Form-Fields

...