Использование динамических переменных с повторным размещением в cfloop

#struct #coldfusion #cfloop

#структура #coldfusion #cfloop

Вопрос:

Я использую cfloop для вставки значений динамической формы в структуру сеанса. Я использую reReplaceNoCase для очистки входных данных и сталкиваюсь с проблемой, пытаясь использовать имена полей динамической формы в методе reReplaceNoCase. Я пробовал разные схемы именования, но не могу определить синтаксис. В опубликованном коде ошибка FORM.RTchoice[r] — это ошибка, которая показывает ошибку: элемент RTCHOICE не определен в Java-объекте типа class [Ljava.lang.Строка;.. Как мне правильно увеличить поля формы на «r»?

 <cfloop index="r" from="1" to="#APPLICATION.theCount#">
   <cfset a = StructInsert(SESSION.USER_OBJECT, "RTchoice#r#", "#reReplaceNoCase(FORM.RTchoice[r], "[^a-zA-Z0-9.,(s)-]", "", "all")#", 1)>
    </cfloop>
  

Комментарии:

1. Это потому, что form.rtChoice является строкой. Все переменные формы являются простыми значениями. Почему вы думаете, что это должна быть структура?

2. Я предположил из «имен полей динамической формы», что OP означает, что есть поля формы с именами RTchoice1 , RTchoice2 и т.д.

Ответ №1:

Вы могли бы использовать

<cfset a = StructInsert(SESSION.USER_OBJECT, "RTchoice#r#", reReplaceNoCase(FORM['RTchoice#r#'], "[^a-zA-Z0-9.,(s)-]", "", "all"), 1)>

Или

<cfset a = StructInsert(SESSION.USER_OBJECT, "RTchoice#r#", reReplaceNoCase(FORM['RTchoice'amp;r], "[^a-zA-Z0-9.,(s)-]", "", "all"), 1)>

Например:https://cffiddle.org/app/file ?filepath=cafebd5c-f4b5-4fc7-93bf-ff81ca97c234/00f6a79c-7f5f-42b2-b567-8a8a371fa8aa/3c7d3229-f65f-4afe-8538-306d98adf25f.cfm

Комментарии:

1. Не имеет прямого отношения к проблеме, но … если нет конкретной причины для использования StructInsert(), проще использовать структурную нотацию imo, т.е. <cfset someStruct["dynamicKeyName"] = ....>

2. Вы правильно подметили @SOS. Я соответствующим образом изменил свой синтаксис.

3. Хороший момент. Я бы использовал StructInsert() только в такой ситуации, если бы это было связано с тем, что я хотел , чтобы исключение создавалось в сочетании с allowOverwrite=false

4. Было бы неплохо добавить пример, чтобы будущие читатели не думали, что вам нужно использовать StructInsert для динамических переменных 🙂