1

I am trying to post the following :

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

Unfortunately I receive a coldfusion error when posting:

Expression-Element ANSWER is undefined in a Java object of type class [Ljava.lang.String;.

Anyone has an idea on how to solve this problem?

4

3 回答 3

4

您不能只调用表单字段“answers[1][]”并希望 ColdFusion 将如何计算出该字符串 - 因为这就是所有“answers[1][]” 是:一个字符串 - 应该被解释作为数组引用。CF 不是那样工作的。

即使它确实像那样工作,您也需要在数组表示法的第二维中输入一个值:answers[1][]is not valid CFML。

当变量看起来与您期望的不同时,第一个故障排除步骤是将变量转储出去(或者在这种情况下,将form范围转储出去):

<cfdump var="#form#">

这将很快表明您没有数组,您在表单范围内有两个变量:一个被调用answer[1][],另一个answer[2][](每个变量都被称为那个)。CF 中的点符号规则不允许将其引用为form.answer[1][],您需要将其引用为form["answer[1][]"].

从 ColdFusion 10 开始,通过在 Application.cfc 中进行设置,可以在表单范围内将具有相同名称的表单变量设置为数组:

 this.sameformfieldsasarray = true

但是,显然(?)仅适用于一维数组。

如果你想要一个多维数组,你必须自己动手做一个循环,遍历表单范围和一个变量名检查,看看每个值应该进入哪个数组/维度。

于 2012-11-07T08:51:19.157 回答
1

感谢 Adam 和 Ben 的回答,他们非常有帮助,并促使我解决了这个难题。我经常在 php 中编码,其中使用 name="xxx[]" 在 $_POST 变量中创建一个数组。现在 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 个结构“answer_1”和“answer_2”,其中包含 2 个逗号分隔的字符串。

但如果我的字符串包含逗号,例如:答案 1,问题 1

当我尝试转换列表中的字符串时,这会给我带来问题。

使用方法 getPageContext().getRequest().getParameterMap() Codfusion 转换数组中逗号分隔的字符串:

结构 answer_1 将包含一个数组:

array[1]="回答 1 问题 1" array[2]="回答 1 问题 2"

这正是我所需要的!

于 2012-11-08T00:28:58.443 回答
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 回答