getPageContext (). getrequest (). getparametermap () с многопартальными формами?
-
25-09-2019 - |
Вопрос
Ниже приведен код, который я использую для тестирования этого:
<cfif structkeyexists(form, "submitted")>
<cfdump var="#getPageContext().getRequest().getParameterMap()#">
</cfif>
<cfoutput>
<form method="post" action="#cgi.script_name#?firstname=tony">
<input type="text" size="50" name="page[contents][][content]">
<input type="text" size="50" name="page[contents][][content]">
<input type="hidden" name="submitted" value="1">
<input type="submit">
</form>
</cfoutput>
Что мы делаем, используют getPageContext (). getrequest (). getparametermap (), чтобы получить хеш формы и сервисы URL во время запроса на почту. Теперь это работает все хорошо и DANDY, пока вы не установите атрибут enctype формы на «Multipart / Form-data», как:
<cfif structkeyexists(form, "submitted")>
<cfdump var="#getPageContext().getRequest().getParameterMap()#">
</cfif>
<cfoutput>
<form method="post" action="#cgi.script_name#?firstname=tony" enctype="multipart/form-data">
<input type="text" size="50" name="page[contents][][content]">
<input type="text" size="50" name="page[contents][][content]">
<input type="hidden" name="submitted" value="1">
<input type="submit">
</form>
</cfoutput>
Что произойдет на данный момент, это то, что ни одно из значений поля формы не возвращается в хеш, возвращенном из GetPageContext (). Getrequest (). GetParameTermap ().
Кто-нибудь знает, где мы можем получить эти данные или обходной путь?
Весь причина мы используем GetPageContext (). GetRequest (). getParameTermap () - это потому, что он возвращает массив в качестве значения переменной вместо списка разделите запятую, как с использованием объема формы.
ОБНОВИТЬ: Это на 8.0.1 с накопленным исправлением 4 приложено.
ОБНОВИТЬ: Причина, по которой вы не можете использовать ListToArray, это потому, что сказать, что у вас есть два поля имени имя и пользователь введите значения для обоих полей (1 и 2). Какой CF будет делать, это вернуть ключ в структуре формы под названием имя С динамическими списком запятой для двух значений (1,2). Это здорово, но сказать Пользователь входит в значения для поля, содержащего запятые Как 1,2,3,4 для первого поля и 5,6,7,8 для второго поля. Значение в форме формы для имя будет 1,2,3,4,5,6,7,8. Это не правильно. Отказ Теперь, поскольку getparametermap () возвращает массив для значения, У меня было бы два элемента вот так: ["1,2,3,4","5,6,7,8"].
ОБНОВИТЬ: Попробовал видеть, что gethttrequestdata (). Содержание вернется на реквизн на льгот. Похоже, это пустой бинарный.
ОБНОВИТЬ: Спасибо вам, чтобы выяснить это, и не используя GetPageContext полностью. Хитрость использовала метод getPartsArray () в области сферы формы. Я даже не знал, что это существовало!
Сохраняйте идеи, пожалуйста!
Решение
(Хорошо .. Возьми два) Это, кажется, работает с CF9. Я не могу проверить это с CF8 в данный момент. Можете ли вы дать это Whirl?
<cfif structkeyexists(form, "submitted")>
<!--- if this is a multipart request ...--->
<cfset variables.parts = form.getPartsArray()>
<cfif structKeyExists(variables, "parts")>
<cfoutput>
<cfloop array="#variables.parts#" index="p">
<cfif p.isParam()>
isParam() = #p.isParam()# <br />
getName() = #p.getName()# <br />
stringValue() = #p.getStringValue()# <hr />
</cfif>
</cfloop>
</cfoutput>
</cfif>
</cfif>