坚果壳中的问题:
具有或多或少相同代码的两种形式,都采用单一值" ean"。一个表单按预期工作,另一个表单无法绑定。我包括
println(form.data)
在每个控制器中查看发生了什么。例如,当输入值" h"时,将打印出工作表单
到每个表单中Map(ean -> h)
"破坏"表格打印出来
Map()
那么为什么第二种形式没有约束价值?
故事:
我一直在使用Play框架在Scala中完成一个项目。事情进展顺利,直到我想创建一个新表格。由于某种原因,这种形式总是无法绑定。我无法理解为什么会这样,所以我决定制作一个"副本"当前工作表单,只更改变量的名称等。但是这" copy"形式也有同样的问题!我在网上寻求了一些帮助,我能找到的最接近的问题如下:
Issue with bindFromRequest in Play! Framework 2.3
但是在尝试发布的解决方案后,它似乎没有任何帮助。下面我发布了相关的代码块," ProductPartForm"是原始的工作形式和" AddDealForm"是破损的副本表格。我在某个地方犯了一个愚蠢的琐碎错误吗?任何帮助将不胜感激。还请注意,我知道"成功"消息不起作用(正如您从评论中看到的那样),但这不应该对我正在考虑的问题产生任何影响。
谢谢!
代码:
类:
package models
case class ProductPartForm(ean: Long) {
}
和
package models
case class AddDealForm(ean : Long) {
}
控制器:
package controllers
class Suppliers extends Controller {
private val productForm: Form[ProductPartForm] = Form(mapping("ean" -> longNumber)(ProductPartForm.apply)(ProductPartForm.unapply))
private val dealForm: Form[AddDealForm] = Form(mapping("ean" -> longNumber)(AddDealForm.apply)(AddDealForm.unapply))
def supplierList = Action {
implicit request =>
val suppliers = Supplier.findAll
Ok(views.html.supplierList(suppliers, productForm, dealForm))
}
def findByProduct = Action { implicit request =>
val newProductForm = productForm.bindFromRequest()
newProductForm.fold(
hasErrors = { form =>
println(form.data)
val message = "Incorrent EAN number! Please try again."
Redirect(routes.Suppliers.supplierList()).flashing("error" -> message)
},
success = { newProduct =>
val productSuppliers = Supplier.findByProduct(newProductForm.get.ean)
val message2 = "It worked!" //can't display message?
Ok(views.html.supplierList(productSuppliers, productForm ,dealForm)).flashing("success" -> message2)
}
)
}
def addDeal = Action { implicit request =>
val newDealForm = dealForm.bindFromRequest()
dealForm.fold(
hasErrors = { form =>
println(form.data)
val message = "Incorrent EAN number! Please try again."
Redirect(routes.Suppliers.supplierList()).flashing("error" -> message)
},
success = { newDeal =>
val message2 = "a"
Redirect(routes.Products.list).flashing("success" -> message2)
}
)
}
HTML:
@helper.form(action = routes.Suppliers.findByProduct()) {
<fieldset style="margin-left:200px">
<legend>
@helper.inputText(productForm("ean"))
</legend>
</fieldset>
<div style="padding-bottom:60px">
<input type="submit" class="btn primary" value="Submit" style="margin-left:400px">
</div>
}
@helper.form(action = routes.Suppliers.addDeal()) {
<fieldset style="margin-left:200px">
<legend>
@helper.inputText(dealForm("ean"))
</legend>
</fieldset>
<div style="padding-bottom:60px">
<input type="submit" class="btn primary" value="Submit" style="margin-left:400px">
</div>
}
路线:
POST /Suppliers controllers.Suppliers.findByProduct
POST /Suppliers/b controllers.Suppliers.addDeal
答案 0 :(得分:0)
我在播放2.4.6版本时遇到了一些问题。在我的情况下问题是我没有指定请求体解析器。有关身体解析器的更多信息,请访问: https://www.playframework.com/documentation/2.5.x/ScalaBodyParsers。 您应该在操作中指定body解析器(如果使用简单形式,请使用urlFormEncoded)
def findByProduct = Action(parse.urlFormEncoded) { implicit request =>
}