getPageContext (). getRequest (). getParameterMap () с многочастными формами? - PullRequest
8 голосов
/ 03 февраля 2010

ниже - код, который я использую, чтобы проверить это:

<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 во время запроса на публикацию. теперь все работает отлично, пока вы не установите атрибут 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, заключается в том, что, скажем, у вас есть два поля с именем firstname и пользователь вводит значения для обоих полей (1 и 2). CF будет возвращать ключ в виде структуры с именем firstname с разделенным запятыми списком для двух значений (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"] .

ОБНОВЛЕНИЕ: Попытка увидеть, что getHttpRequestData (). Содержимое будет возвращаться в соответствии с предложением Ли. Похоже, это пустой двоичный файл.

ОБНОВЛЕНИЕ: Спасибо вам, Ли, за то, что вы поняли это и без использования getPageContext полностью. хитрость заключалась в использовании метода getPartsArray () в области видимости формы. Я даже не знал, что это существовало!

Продолжайте идеи, пожалуйста!

1 Ответ

3 голосов
/ 04 февраля 2010

(Хорошо, возьми два). Это похоже на работу с CF9. Я не могу проверить это с CF8 в настоящее время. Можете ли вы дать ему водоворот?

<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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...