如何将其他表单数据传递给Scala Play

时间:2014-03-14 03:40:46

标签: scala playframework playframework-2.0

我有两张桌子A和B ......

A的字段:(id,companyID)

B的字段:(id,product,qty)

我必须将一个companyID传递给表单并在表中创建一个新行。但是,我还需要通过此表单传递一串项目及其数量。但是我不知道该怎么做,因为html中的Form会对它进行类型检查,它也会失败,因为Model只期望一个companyID而不是一串项目。如何传递这条信息,以便我可以在控制器中访问它?我需要它,所以我可以查询其他数据。

编辑。 (这就是html的样子)

@(orderForm: Form[Order])

@form(routes.CustomersController.submitOrder) {
    @inputText(orderForm("depotID"))
    <input type="submit" value="Create" class="btn btn-large btn-mobile-block btn-blue">
}

但是,我需要一个额外的输入字段,我可以输入一个值,然后控制器可以访问。

1 个答案:

答案 0 :(得分:1)

您不仅限于将单个变量(例如表单)传递给视图。例如,您可以将products : List[Product](包含您的项目和数量)作为第二个变量传递给您的表单。通常我会有一个主要表单和支持变量 - 不提交支持信息,它只是以某种方式支持表单。例如。在视图中:

@(companyForm:Form[Company], products:List[Product])

在控制器中,语句如

Ok(views.html.company.add(companyForm, Product.list())

您没有提供大量信息,因此很难确定这是否正好回答您的问题。看一下你的代码会更有帮助。另外,请查看我发现非常有用的Play samplesScala Forms page

编辑:如果您希望将额外的项目(例如Seq[Product])从视图传递到控制器,那么您可以使用包含该列表的自定义案例类,并让您的控制器或模型将其拆分进入实际的模型案例类。例如。

case class ComputerProduct(id: Int, companyId: Int, products: Seq[Product])
val computerProductForm: Form[ComputerProduct] = Form(mapping(
  "id" -> number,
  "companyId" -> number,
  "products" -> seq(mapping(
    "id" -> number,
    "product" -> text,
    "quantity" -> number)(Product.apply)(Product.unapply)))
  (ComputerProduct.apply)(ComputerProduct.unapply))