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()を使用して、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>

この時点で何が起こるかというと、getPageContext()。getRequest()。getParameterMap()から返されたハッシュではフォームフィールドの値は返されません。

このデータまたは回避策をどこで、どのように取得できるかを誰かが知っていますか?

getPageContext()。getRequest()。getParameterMap()を使用している理由は、フォームスコープを使用する場合のように、コンマ区切りのリストではなく、変数の値として配列を返すためです。

更新:これは8.0.1にあり、累積的な修正プログラム4が適用されています。

更新: listToArrayを使用できない理由は、firstnameという名前の2つのフィールドがあり、ユーザーが両方のフィールド(1と2)の値を入力したとします。CFが行うことは、2つの値(1,2)のコンマ区切りリストを含むfirstnameという形式の構造体のキーを返すことです。これはすばらしいことですが、ユーザーが最初のフィールドに1,2,3,4、2番目のフィールドに5,6,7,8のようなコンマを含むフィールドの値を入力するとします。名のフォーム構造体の値は、1,2,3,4,5,6,7,8になりますこれは正しくありません。getParameterMap()は値の配列を返すため、次のような2つの要素があります。 ["1,2,3,4"、 "5,6,7,8"]

更新:リーの提案に従ってgetHttpRequestData()。contentが何を返すかを確認してみました。空白のバイナリのようです。

更新: getPageContextを完全に使用せずに、これを理解してくれたLeighに感謝します。トリックは、フォームスコープでgetPartsArray()メソッドを使用することでした。これが存在することすら知りませんでした!

アイデアを続けてください!

4

1 に答える 1

3

(わかりました..2つ取ってください)これは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 に答える