PlayFramework(1.2)。在控制器中处理对象数组

PlayFramework(1.2)。在控制器中处理对象数组,playframework,playframework-1.x,Playframework,Playframework 1.x,我正在为一个应用程序开发一个动态表单模块,其中有一个作为答案提交的随机问题列表。我遇到的问题是,提交的答案[]数组的顺序与视图中指定的顺序不同。(即答案[0]。视图中的值作为答案[3]。值进入控制器)。看起来,视图提交的数组没有被视为真正的数组,而是进入一个无序集,然后在到达控制器之前转换回数组。除了将数组视为无序集并且必须使用手动索引之外,还有什么办法可以解决这个问题呢 我的控制器基本上是: public static void process(Answer[] answers){ fo

我正在为一个应用程序开发一个动态表单模块,其中有一个作为答案提交的随机问题列表。我遇到的问题是,提交的答案[]数组的顺序与视图中指定的顺序不同。(即答案[0]。视图中的值作为答案[3]。值进入控制器)。看起来,视图提交的数组没有被视为真正的数组,而是进入一个无序集,然后在到达控制器之前转换回数组。除了将数组视为无序集并且必须使用手动索引之外,还有什么办法可以解决这个问题呢

我的控制器基本上是:

public static void process(Answer[] answers){ for(int i=0;i<answers.length;i++){ if(answers[i].question.required){ Validation.required("answers["+i+"].value,answers[i].value); } } if(Validation.hasErrors()){ //render the template }else{ //save } } 公共静态作废流程(答案[]答案){ 对于(int i=0;i 注意:我正在使用Play!Framework 1.2.5

对于控制器方法签名,您应该使用
列表
,而不是
应答[]

公共静态作废流程(列出答案){
…//你的逻辑
}
我建议您在视图中使用基于零的索引数组,因为视图中的
question\u index
变量以值
1
开头。如果您坚持不使用基于零的索引数组,列表大小将增加1个元素。这是因为您以索引
1
开头,并且
0
第四个索引具有
null

为了避免这种情况,您的视图应该如下所示:

#{列出项目:questionSet.questions,如:“question”}
#{/list}
如果使用
List
替换
Answer[]
数组怎么办?该列表修复了排序问题。(也要感谢格林也指出了这一点) #{list items:questionSet.questions, as:"question"} ... <div class="#{if play.data.validation.Validation.hasError("anwsers["+question_index+'].value)}error#{/if}"> <input name="answers[${question_index}].question.id" value="${question.id}"/> <input name="answers[${question_index}].value" value="${answers[question_index].value}/> <div/> #{/list}