getPageContext().getRequest().getParameterMap()与多部分表单?

rip*_*747 8 java coldfusion multipartform-data

下面是我用来测试这个的代码:

<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>
Run Code Online (Sandbox Code Playgroud)

我们正在做的是使用getPageContext().getRequest().getParameterMap()在post请求期间检索表单和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>
Run Code Online (Sandbox Code Playgroud)

此时发生的情况是,从getPageContext().getRequest().getParameterMap()返回的散列中没有返回任何表单字段值.

有谁知道我们在哪里或如何获得这些数据或解决方法?

我们使用getPageContext().getRequest().getParameterMap()的全部原因是因为它返回一个数组作为变量的值而不是逗号分隔列表,就像使用表单范围一样.

更新:这是在8.0.1上应用了cumlative修补程序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().内容将根据Leigh的建议返回.它似乎是一个空白的二进制文件.

更新:感谢Leigh搞清楚这一点,而不是完全使用getPageContext.诀窍是在表单范围上使用getPartsArray()方法.我甚至都不知道这个存在!

请保持好点!

Lei*_*igh 3

(好吧..拿两个)这似乎适用于 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>
Run Code Online (Sandbox Code Playgroud)