我需要使用表单输入而不进行任何验证。 (值是可选的)所以我试图在表单中使用可选类型,但它弹出一些错误。我只需要创建一个包含4个输入字段的表单,其中3个需要仅作为文本值进行验证,另外一个字段可选(其值可以为空或不是),并且不在表单提交中验证
从stdout读取: d:\ PROJECTS \测试\ Project_VendorM6 \程序\型号\ ProductSearch.scala:6: 找不到:输入可选 d:\ PROJECTS \测试\ Project_VendorM6 \程序\型号\ ProductSearch.scala:6: 找不到:type可选从stdout读取:case类 产品搜索(proname: 串,brandid:字符串,typeid的:字符串,供应商ID:可选[字符串]) case class ProductSearch(proname:String,brandid:String,typeid:String,supplierid:optional [String])读取 来自stdout:^
这是我在控制器中的表单验证
import play.api.data.Form
import play.api.data.Forms.{mapping, nonEmptyText,bigDecimal,text,number,optional}
private val productSearchForm: Form[ProductSearch] = Form(
mapping(
"proname" -> text,
"probrand" -> text,
"protype" -> text,
"prosup" -> optional(text)
)(ProductSearch.apply)(ProductSearch.unapply)
)
这是我的模特
package models
import play.api.db._
import play.api.Play.current
import scala.collection.mutable.ListBuffer
case class ProductSearch(proname: String,brandid:String,typeid:String,supplierid:optional[String])
object ProductSearch {
}
我在没有模型中的可选关键字的情况下尝试了它,如下所示
case class ProductSearch(proname: String,brandid:String,typeid:String,supplierid:String)
然后弹出两个编译错误
从stdout读取: d:\项目\测试\ Project_VendorM6 \应用\控制器\ Products.scala:39: 类型不匹配;从stdout读取:found:(String,String,String, String)=> models.ProductSearch从stdout读取:必需:(String, String,String,Option [String])=> ?
和
从stdout读取: d:\项目\测试\ Project_VendorM6 \应用\控制器\ Products.scala:39: 在对象ProductSearch中缺少方法unapply的参数;读 来自stdout:如果要将其视为部分应用,请使用
_' if you want to treat it as a partially applied function D:\PROJECTS\test\Project_VendorM6\app\controllers\Products.scala:39: missing arguments for method unapply in object ProductSearch; follow this method with
_'跟随此方法 函数从stdout读取: )(ProductSearch.apply)(ProductSearch.unapply) )(ProductSearch.apply)(ProductSearch.unapply)
答案 0 :(得分:2)
几乎就在那里。您对模型对象的定义应使用Scala Option
:
case class ProductSearch(proname:String,
brandid:String,
typeid:String,
supplierid:Option[String])