Html 如何在play framework/scala中将会话变量传递到表单以存储在数据库中

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

下面是我的表格提交页面。author变量是我希望从登录用户处获取的变量,因为它是我需要与其余这些输入一起放入数据库的数据的一部分。我想知道如何在登录用户的这个实例中获取用户名,并将其传递到author字段,而无需用户自己键入

@(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]字段,然后只更新控制器字段上的类值。