【发布时间】:2012-09-22 05:12:27
【问题描述】:
现在我只是使用params 函数来获取已发布到 URL 的数据。
在 Scalatra 中是否有其他方法可以像在 Play Framework 中一样处理表单? Scalatra 是否支持既可用于创建表单又可用于自动填写表单的对象?
【问题讨论】:
现在我只是使用params 函数来获取已发布到 URL 的数据。
在 Scalatra 中是否有其他方法可以像在 Play Framework 中一样处理表单? Scalatra 是否支持既可用于创建表单又可用于自动填写表单的对象?
【问题讨论】:
Scalatra 不提供如此复杂的功能。它并不复杂,因为它难以实施,它的复杂性来自于参与的各方的数量。
首先,您需要Model 来表示您域中的对象,Scalatra 默认不提供任何模型库。然后运行时使用此模型将 HTTP 请求中设置的任意字符串转换为某个模型的实例。例如
GET 并指定了user.id 之类的参数,则绑定软件将此字符串转换为User 类型的对象,在数据库中通过其ID 找到。POST,指定三个参数,如user.name、user.password和user.birthday,并且不指定user.id,运行时构建一个类型为User 准备好使用简单的User.save() 放入数据库中 - 如果通过了User 类中指定的验证(如果有),则提供PUT(或Scalatra 文档中解释的等价物)并且包含user.id 和user.birthday,首先通过ID 检索User,然后更新其生日,最后生成可用于您的控制器,准备致电User.save()
如您所见,这需要模型库、绑定库和运行时中的胶水支持。
要生成 HTML 表单,您需要一个帮助程序库来检查模型并为您输出 HTML 位。例如,您的库检查User 类,检测到它具有三个公共字段name、password 和birthday,并且根据使用<model>.<property> 作为输入名称的约定,输出
<form action="$$$$" method="$$$$">
<input name="user.name" />
<input name="user.password" />
<input name="user.birthday" />
<input type="submit" />
</form>
注意
User 对象一旦你把所有的部分放在一起,你就组成了一个 MVC 框架,那么使用像 Scalatra 这样的小型 RESTful 软件有什么意义呢?
【讨论】: