【问题标题】:Is there a good way to deal with form submission in Scalatra在 Scalatra 中处理表单提交有什么好的方法吗
【发布时间】:2012-09-22 05:12:27
【问题描述】:

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

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

【问题讨论】:

    标签: scala scalatra


    【解决方案1】:

    Scalatra 不提供如此复杂的功能。它并不复杂,因为它难以实施,它的复杂性来自于参与的各方的数量。

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

    • 如果请求是GET 并指定了user.id 之类的参数,则绑定软件将此字符串转换为User 类型的对象,在数据库中通过其ID 找到。
    • 如果请求是POST,指定三个参数,如user.nameuser.passworduser.birthday,并且指定user.id,运行时构建一个类型为User 准备好使用简单的User.save() 放入数据库中 - 如果通过了User 类中指定的验证(如果有),则提供
    • 如果请求是PUT(或Scalatra 文档中解释的等价物)并且包含user.iduser.birthday,首先通过ID 检索User,然后更新其生日,最后生成可用于您的控制器,准备致电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 和方法只能在了解了一些上下文(例如路由)后才能填充
    • 绑定库必须使用相同的命名约定来反序列化此表单提交的User 对象

    一旦你把所有的部分放在一起,你就组成了一个 MVC 框架,那么使用像 Scalatra 这样的小型 RESTful 软件有什么意义呢?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-04
      • 1970-01-01
      • 2019-12-14
      • 2012-08-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-03
      • 1970-01-01
      相关资源
      最近更新 更多