#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)>
Комментарии:
1. Не имеет прямого отношения к проблеме, но … если нет конкретной причины для использования StructInsert(), проще использовать структурную нотацию imo, т.е.
<cfset someStruct["dynamicKeyName"] = ....>
2. Вы правильно подметили @SOS. Я соответствующим образом изменил свой синтаксис.
3. Хороший момент. Я бы использовал
StructInsert()
только в такой ситуации, если бы это было связано с тем, что я хотел , чтобы исключение создавалось в сочетании сallowOverwrite=false
4. Было бы неплохо добавить пример, чтобы будущие читатели не думали, что вам нужно использовать StructInsert для динамических переменных 🙂