【问题标题】:PlayFramework (1.2). Processing array of Objects in controller播放框架(1.2)。处理控制器中的对象数组
【发布时间】:2013-05-06 22:45:37
【问题描述】:

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

我的控制器基本上是:

公共静态无效进程(Answer[] 答案){ for(int i=0;i

在我的模板中

#{list items:questionSet.questions, as:"question"} ...
  • 如果用List<Answer>代替Answer[]数组呢?

标签: playframework playframework-1.x


【解决方案1】:

注意:我使用的是 Play!Framework 1.2.5

您应该使用List<Answer> 代替Answer[] 进行控制器方法签名:

public static void process(List<Answer> answers) {
    ... // your logic
}

我建议您在视图上使用 zero-based-indexing-array,因为视图上的 question_index 变量以值 1 开头。如果您坚持不使用 从零开始的索引数组,您的列表大小将增加 1 个元素。这是因为您从索引1 开始,而0-th 索引具有null 值。

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

 #{list items:questionSet.questions, as:"question"}
 <div class="...">
    <input name="answers[${question_index-1}].id" value="${...}"/>
    <input name="answers[${question_index-1}].value" value="${...}"/>
 </div>
 #{/list}

【讨论】:

  • 列表 修复了排序问题。 (也感谢格林也指出了这一点)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-19
  • 2014-02-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多