gpt4 book ai didi

java - play.data.Form.Field 到 play.data.Form[models.xxxx] 可以吗?

转载 作者:行者123 更新时间:2023-11-30 09:30:54 25 4
gpt4 key购买 nike

我正在使用 PlayFramwork 和 Java 开发 Web 应用程序。我试图在主视图中实现一个简单的表单,但在这个 View 中我添加了不同的模板。将参数传递给 View 时遇到一些问题。错误是:

type mismatch; found : play.data.Form.Field required: play.data.Form[models.Document]

让我用代码来解释。

showUserView.scala.html/主视图的内容

@(user: Form[User])

@import helper._
@import helper.twitterBootstrap._

@main("Test") {

<H1>SHOW USER</H1>


@newUserView(user)

@documentView(user("document"))

}

问题出在这一行:

@documentView(user("document"))

newUserView.scala.html 的内容/这工作正常

@(user: Form[User])

@import helper._
@import helper.twitterBootstrap._


<H2>User's Form</H2>

@inputText(
user("name"),
'_label -> "Name: "
)

documentView.scala.html 的内容/这就是问题所在...

@(doc: Form[Document])

@import helper._
@import helper.twitterBootstrap._


<H2>Document's Form</H2>

@inputText(
doc("number"),
'_label -> "Number: "
)

我正在准备 View 以接收没有字段的表单...我不想更改参数的类型。我会保留原始模板。

有什么想法吗?如何将 Field 参数转换为 Form[Document]?

最佳答案

您需要在 Controller 中创建并填充两个模型,然后分别传递给您的主视图 ( showUserView.scala.html):

@(userForm: Form[User], documentForm: Form[Document])
@import helper._
@import helper.twitterBootstrap._

@main("Test") {
<H1>SHOW USER</H1>
@newUserView(userForm)
@documentView(documentForm)
}

无论如何...

据我了解,您想编辑一些 Document's填充上下文中的字段 User在这种情况下,您应该只对两个 subview 使用一个表单(用户),然后在保存/更新数据的操作中通过隐藏的 id 查找相关文档:

@(userForm: Form[User])
@import helper._
@import helper.twitterBootstrap._

@main("Test") {
<H1>SHOW USER</H1>
@newUserView(userForm)
@documentView(userForm)
}

documentView.scala.html

@(userForm: Form[User])
@import helper._
@import helper.twitterBootstrap._

<H2>Documents Form</H2>
<input type="hidden" name="document.id" value='@userForm("document.id").value' >
@inputText(
userForm("document.number"),
'_label -> "Number: "
)

因此,在保存用户时,您可以在请求中找到文档的 ID 和新编号,并使用这些数据更新文档:

public static result saveUserAndDoc(){
// save user as usually by binding the form...

Integer documentId = Integer.valueOf(form().bindFromRequest().get("document.id"));

Document document = Document.find.byId(documentId);
document.number = Integer.valueOf(form().bindFromRequest().get("document.number"));
document.update(documentId);
return ok("User saved with changed document number);
}

当然那个样本不包含<form></form>标签 - 只是字段 - 你需要在适当的地方添加

关于java - play.data.Form.Field 到 play.data.Form[models.xxxx] 可以吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13081534/

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