以下は、これをテストするために使用しているコードです。
<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()メソッドを使用することでした。これが存在することすら知りませんでした!
アイデアを続けてください!