gpt4 book ai didi

java - 在游戏框架中将对象列表从 View 传递到 Controller

转载 作者:行者123 更新时间:2023-12-01 12:04:18 25 4
gpt4 key购买 nike

在我的 play(FOR JAVA) 应用程序中,我有一个对象列表 (java.util.List),它将传递到 View 并向用户显示。然后用户可能会也可能不会删除列表中的某些对象,之后,我想将编辑后的列表传递回 Controller ,但我无法执行最后一部分(从 View 传递到 Controller )。

因为我的列表可能很大,所以我不想用 GET 来做到这一点(GET 也有点不安全?!)并且不知道如何用 POST 来做到这一点,(或者还有其他方法吗?)解决方案?)

如果我能得到一些帮助,那就太好了。

我的列表中的对象属于这种类型:

public class CalObj {

private String pdfFileName;
private String serialNo;
private Date calDate;
private Device device;
}

更新:谢谢@biesior,我的 View (calExtractionResults.scala.html)现在看起来像这样:

    @for(calObj <- calObjList) {
<tr>
<td> @calObj.getPdfFileName</td>
<td> @calObj.getSerialNo</td>
<td> @calObj.getDevice.name</td>
<td> @calObj.getDevice.calDateToString()</td>
<td> @calObj.getCalDate</td>
<td>
<form action="@DateExtractorContr.updateList(calObjList, calObj)" method="POST">
<input type="hidden" name="serialNo" value="@calObj.getSerialNo"/>
<input type="submit" value="Delete"/>
</form>
</td>

</tr>
}

这是在我的 Controller 中:

public static Result updateList(List<CalObj> calObjs, CalObj objToDel){
List<CalObj> newList = calObjs;
newList.remove(objToDel);
return ok(calExtractionResults.render(newList));
}

但是当我打开相关页面时,出现问题:

  1. 使用上面的代码,我得到:[ConcurrentModificationException: null]
  2. 如果我用一个不会产生并发异常的虚拟函数替换 updateList 函数,则在显示页面之前,程序会执行该虚拟函数。在我点击“删除”按钮之前。

最佳答案

很简单:

使用 @for 语句迭代列表,以单独的形式包装每个元素:

@for(item <- yourList) {
<h1>@item.name</h1>
<form action="/link/to/delete/action" method="POST">
<input type="hidden" name="id" value="@item.id"/>
<input type="submit" value="Delete"/>
</form>
}

因此,删除该项目后,您可以再次重定向到 ListView 。

如您所见,您需要一些唯一的 ID(也许 serialNo 将角色保留在您的案例中,不知道)。

编辑:当然,您也可以创建一个表单女巫复选框作为数组,如果您想删除多个元素,可以立即发送它。

关于java - 在游戏框架中将对象列表从 View 传递到 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27743165/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com