1

私は以下を投稿しようとしています:

<input name="answer[1][]" value="Answer 1 question 1"/> <input name="answer[1][]" value="Answer 2 question 1"/>

<input name="answer[2][]" value="Answer 1 question 2"/> <input name="answer[2][]" value="Answer 2 question 2"/>

残念ながら、投稿時にコールドフュージョン エラーが表示されます。

Expression-Element ANSWER は、型クラス [Ljava.lang.String; の Java オブジェクトで定義されていません。

誰でもこの問題を解決する方法について考えがありますか?

4

3 に答える 3

4

フォーム フィールドを「answers[1][]」と呼んで、ColdFusion がその文字列をどのように処理するかを期待することはできません。配列参照として。CFはそうはいかない。

そのように機能したとしても配列表記の 2 番目の次元に値を入れる必要がありますanswers[1][]。これは有効な CFML ではありません。

変数が予想とは異なるように見える場合の最初のトラブルシューティング手順は、変数をダンプすることです (この場合は、formスコープをアウトします)。

<cfdump var="#form#">

これにより、配列がなく、フォーム スコープに 2 つの変数があることがすぐにわかりanswer[1][]ますanswer[2][]。CF のドット表記規則では、これを として参照することはできません。form.answer[1][]として参照する必要がありますform["answer[1][]"]

ColdFusion 10 では、Application.cfc で次のように設定することにより、同じ名前のフォーム変数をフォーム スコープに配列として設定できます。

 this.sameformfieldsasarray = true

ただし、明らかに (?) は 1 次元配列に対してのみ機能します。

多次元配列が必要な場合は、フォーム スコープと変数名チェックをループして、各値がどの配列/次元に入る必要があるかを確認する必要があります。

于 2012-11-07T08:51:19.157 に答える
1

おそらく、ColdFusion が "answer[1][]" キーを使用して FORM Scope を作成しようとしており、ColdFusion/Java では無効な変数名である式として評価されている可能性があります。やりたいことによっては、おそらく入力フィールドの名前を answer_Q_A aka answer_1_1, answer_1_2, answer_2_1 のような名前に変更し、そこから配列に処理する必要があります。

<cfset answerArray = arrayNew(2)>

<cfloop collection="#form#" item="thisField">
     <cfif left(thisField,6) eq 'ANSWER' and listLen(thisField,'_') eq 3>
         <cfset answerArray[listGetAt(thisField,2,'_')][listGetAt(thisField,3,'_')] = form[thisField]>
     </cfif>
</cfloop>
于 2012-11-07T06:42:52.973 に答える
1

Adam と Ben の回答に感謝します。彼らは非常に役に立ち、私をパズルの解決に導きました。name="xxx[]" を使用すると $_POST 変数に配列が作成される php で頻繁にコーディングしています。"[]" を追加する必要がないため、Coldfusion はエラーをスローします。

私がしたことは次のとおりです。 <input name="answer_1" value="Answer 1 question 1"/> <input name="answer_1" value="Answer 2 question 1"/>

<input name="answer_2" value="Answer 1 question 2"/> <input name="answer_2" value="Answer 2 question 2"/>

Coldfusion は、カンマで区切られた 2 つの文字列を含む 2 つの構造体 "answer_1" と "answer_2" を返します。

しかし、私の文字列にコンマが含まれているとしたら、例えば: Answer 1, question 1

これにより、リスト内の文字列を変換しようとすると問題が発生します。

メソッド getPageContext().getRequest().getParameterMap() を使用すると、Codfusion はコンマ区切りの文字列を配列に変換します。

構造体 answer_1 には配列が含まれます。

array[1]="回答 1 の質問 1" array[2]="回答 1 の質問 2"

そして、これはまさに私が必要としていたものです!

于 2012-11-08T00:28:58.443 に答える