8

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

<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() 方法。我什至不知道这存在!

请保持想法!

4

1 回答 1

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>
于 2010-02-04T19:38:45.877 回答