Html 如何在play framework/scala中将会话变量传递到表单以存储在数据库中
下面是我的表格提交页面。author变量是我希望从登录用户处获取的变量,因为它是我需要与其余这些输入一起放入数据库的数据的一部分。我想知道如何在登录用户的这个实例中获取用户名,并将其传递到author字段,而无需用户自己键入Html 如何在play framework/scala中将会话变量传递到表单以存储在数据库中,html,scala,playframework,Html,Scala,Playframework,下面是我的表格提交页面。author变量是我希望从登录用户处获取的变量,因为它是我需要与其余这些输入一起放入数据库的数据的一部分。我想知道如何在登录用户的这个实例中获取用户名,并将其传递到author字段,而无需用户自己键入 @(itemForm: Form[models.SubmittedWork],user: models.users.User) @import helper._ @main("Add submission",user){ <p class="lead"&g
@(itemForm: Form[models.SubmittedWork],user: models.users.User)
@import helper._
@main("Add submission",user){
<p class="lead">Add a new submission</p>
@form(action=routes.HomeController.addSubmissionSubmit(), 'class -> "form-horizontal", 'role -> "form") {
@* CSRF attack prevention *@
@* This token, sent by the controller, will be used to authenticate the form submission *@
@CSRF.formField
@inputText(itemForm("name"), '_label -> "Name", 'class -> "form-control")
@select(
itemForm("Genre.id"),
options(Genre.options),
'_label -> "Genre", '_default -> "-- Choose a Genre --",
'_showConstraints -> false, 'class -> "form-control"
)
@inputText(itemForm("text"), '_label -> "Text", 'class -> "form-control")
@inputText(itemForm("id"), '_label -> "", 'hidden -> "hidden")
@inputText(itemForm("author"),'_label -> "", 'hidden -> "hidden")
<div class="actions">
<input type="submit" value="Add/Update item" class="btn btn-primary">
<a href="@routes.HomeController.works(0)">
<button type="button" class="btn btn-warning">Cancel</button>
</a>
</div>
} @* end of form *@
} @* end of main *@
您只需通过控制器将其连接
def myView(): Action[AnyContent] = Action { implicit req =>
val userId = req.session("user_id")
val user = findUser(userId)
Results.Ok(views.yourForm(itemForm, user))
}
那么在你看来,
<p class="username">${user.name}</p>
findUser方法或其他方法允许您根据请求中的某种数据搜索用户。如果用户没有潜在登录,req.sessionkey将返回null,因此您可能需要一个选项[user]
关键是,您可以将任何变量传递给表单,并使用@{variable.field}语法显示任何您喜欢的内容。Twirl语法允许您这样做,也允许集合上的循环为每个元素创建div等
快速阅读,它将帮助您了解它可以做什么的所有示例。要获取数据,通常最好将逻辑放在控制器中,并将其传递给视图。多亏了您,我可以通过键入@{user.getUsername}来显示用户名,但我希望它成为表单的一部分,显示或不显示但不可更改这将链接到my Model中的Author变量您不需要在表单上输入它,因为您可以在控制器上访问该用户,您所能做的就是显示用户名将更容易,这将实现以下技巧:从Author到Option[Author]字段,然后只更新控制器字段上的类值。