Scala Play框架视图中的强类型表单字段

Scala Play框架视图中的强类型表单字段,scala,playframework,playframework-2.0,Scala,Playframework,Playframework 2.0,我们必须将属性名称用作字符串,以在Play Framework视图中呈现HTML字段: 斯卡拉: case class MyClass(myField: Int) 视图: 这不是强类型的 那么,有没有办法以强类型的方式提及字段名呢? 像这样: @helper.inputText(form(model => model.myField), '_label -> "Field Title") 我确信这在Scala中是可能的,但幸运的是我们有宏,这样的代码可以在没有任何运行时开销的情况

我们必须将属性名称用作字符串,以在Play Framework视图中呈现HTML字段:

斯卡拉:

case class MyClass(myField: Int)
视图:

这不是强类型的

那么,有没有办法以强类型的方式提及字段名呢? 像这样:

@helper.inputText(form(model => model.myField), '_label -> "Field Title")

我确信这在Scala中是可能的,但幸运的是我们有宏,这样的代码可以在没有任何运行时开销的情况下实现。

不要将字符串看作属性的名称,而是将表单字段id/名称看作字符串,因为表单建模的是表单,而不是对象(例如,使用元组作为数据结构对表单进行建模是可能的,甚至非常有用)。这确实是强类型的,因为在其中只能发送字符串

不过,您的问题是,您希望更多地使用类型系统,将实际值编码为类型或避免拼写错误的内容等

我认为你可以采取一些方法,有各种好处和问题:

  • 编写自己的表单api,并使用类型系统以某种方式标识字段ID
  • 在项目中强制使用常量作为键,而不是使用类型系统,而是决定这样做
  • 为表单生成器和表单帮助程序编写自己的包装器,它们接受一些更严格的类型作为键
  • 将模型字段表示为某种“属性”类型,并将其与表单生成器和表单帮助器的自定义包装器相结合
这两种方法都不是真正内置的,除了常量方法之外,其他方法都会让您编写或多或少复杂的代码,因此您必须将其与解决此问题的实际收益进行权衡

祝你好运

@helper.inputText(form(model => model.myField), '_label -> "Field Title")