3

现在我只是使用params函数来获取已发布到 URL 的数据。

有没有其他方法可以像在 Play Framework 中那样处理 Scalatra 中的表单?Scalatra 是否支持既可用于创建表单又可自动填写表单的对象?

4

1 回答 1

4

Scalatra 没有提供如此复杂的功能。从难以实施的意义上说,它并不复杂,它的复杂性来自于参与的各方的数量。

首先,您需要 aModel来表示域中的对象,而 Scalatra 默认情况下不提供任何模型库。然后运行时使用此模型将 HTTP 请求中设置的任意字符串转换为某个模型的实例。例如

  • 如果请求是 aGET并指定了一个参数 like user.id,则绑定软件将此字符串转换为 type 的对象,User通过其 ID 在数据库中找到。
  • 如果请求是 a POST,指定三个参数,如,user.name并且user.password指定a ,则运行时构建一个类型的对象,该对象准备好放入数据库中班级user.birthdayuser.idUserUser.save()User
  • 如果请求是 a PUT(或 Scalatra 文档中解释的等价物)并且包含user.idand user.birthday,首先User通过 ID 检索 an,然后更新其生日,最后提供给您的控制器,准备调用User.save()

如您所见,这需要模型库、绑定库和运行时中的胶水支持。

要生成 HTML 表单,您需要一个帮助程序库来检查模型并为您输出 HTML 位。例如,您的库检查User该类,检测到它具有三个公共字段namepasswordbirthday,并且根据使用<model>.<property>作为输入名称的约定,输出

<form action="$$$$" method="$$$$">
  <input name="user.name" />
  <input name="user.password" />
  <input name="user.birthday" />
  <input type="submit" />
</form>

注意

  • URL 和方法只能在了解某些上下文(例如路由)后才能填充
  • the same naming convention must be used by the binding library to deserialize a User object submitted by this form
  • etc.

Once you have all the pieces put together, you have made up an MVC framework, so what's the point in using a tiny, RESTful software like Scalatra?

于 2012-09-22T15:34:39.873 回答