下面是我用来测试的代码:
<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。firstname结构中的值将是1,2,3,4,5,6,7,8。这是不正确的。现在由于 getParameterMap() 返回值的数组,我将有两个元素,如下所示:["1,2,3,4","5,6,7,8"].
更新:尝试查看 getHttpRequestData().content 根据 Leigh 的建议返回的内容。它似乎是一个空白二进制文件。
更新:感谢 Leigh 在没有完全使用 getPageContext 的情况下解决了这个问题。诀窍是在表单范围内使用 getPartsArray() 方法。我什至不知道这存在!
请保持想法!