2010-02-03 13 views
8

a continuación es el código que estoy usando para probar esto:..getPageContext(). GetRequest(). GetParameterMap() con formularios de varias partes?

<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> 

lo que estamos haciendo está utilizando getPageContext() getRequest() getParameterMap() para recuperar un hash de la forma y alcances durante url una solicitud posterior. Ahora bien, este trabajo todo lo fino y elegante hasta que se establece el atributo enctype de la forma de "multipart/form-data" de esta manera:

<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> 

lo que ocurre en este momento es que se devuelven nada del valor de campo de formulario en el hash devuelto por getPageContext(). getRequest(). getParameterMap().

¿Alguien sabe dónde o cómo podemos obtener esta información o una solución alternativa?

la razón por la que estamos utilizando getPageContext(). GetRequest(). GetParameterMap() es porque devuelve una matriz como el valor de la variable en lugar de una lista delimitada por comas como el uso del alcance del formulario.

ACTUALIZACIÓN: esto es en 8.0.1 con la revisión cumulativa 4 aplicada.

ACTUALIZACIÓN: La razón por la que no se puede utilizar listToArray se debe a que tiene dos campos nombre apellido y el usuario introduce los valores para ambos campos (1 y 2). lo que CF hará es devolver una clave en la estructura de formulario llamada primer nombre con una lista coma commentada para los dos valores (1,2). esto es genial, pero digamos que el usuario ingresa valores para el campo que contiene comas como 1,2,3,4 para el primer campo y 5,6,7,8 para el segundo campo. el valor en la estructura de formulario para primer nombre será 1,2,3,4,5,6,7,8. esto no es correcto. ahora, dado que getParameterMap() devuelve una matriz para el valor, tendría dos elementos, así: ["1,2,3,4", "5,6,7,8"].

ACTUALIZACIÓN: Intenté ver qué getHttpRequestData(). El contenido volvería por sugerencia de Leigh. Parece ser un binario en blanco.

ACTUALIZACIÓN: Gracias Leigh por resolver esto y sin usar getPageContext por completo. el truco fue usar el método getPartsArray() en el alcance del formulario. ¡Ni siquiera sabía que esto existía!

Guarde las ideas por favor!

+0

¿Qué versión de ColdFusion estás usando? No estoy experimentando ninguna diferencia en los resultados de tus dos fragmentos con CF8. –

+0

¿Podría usar listToArray para analizar el contenido? –

+0

Podría estar equivocado, pero no creo que getParameter() funcione con enctype = "multipart/form-data". Creo que necesitaría un tipo diferente de objeto de solicitud, es decir, uno capaz de analizar solicitudes de varias partes. – Leigh

Respuesta

2

(De acuerdo ... tome dos) Esto parece funcionar con CF9. No puedo probarlo con CF8 en este momento. ¿Puedes darle un giro?

<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> 
+0

¡¡¡Podría abrazarte !!! ¡Confirmó que este trabajo en CF8! – rip747

+0

¿cómo demonios descubriste esto? por favor explique – rip747

+0

Fue un problema interesante, así que escribí una entrada rápida en el blog. Siéntase libre de saltar hasta el final;) ​​http://cfsearching.blogspot.com/2010/02/form-field-values-multipart-forms-and.html – Leigh

Cuestiones relacionadas