Forms Playframework表单和两个提交按钮

Forms Playframework表单和两个提交按钮,forms,playframework-2.0,Forms,Playframework 2.0,我有编辑订单的表单,但我必须添加删除订单的按钮。现在我有了带有两个提交按钮的表单: @helper.form(routes.Order.editOrder,'class -> "form-horizontal") { @helper.inputText( PlayMagicForJava.javaFieldtoScalaField(editOrderForm("date")), '_label -> "Date:", '_help ->

我有编辑订单的表单,但我必须添加删除订单的按钮。现在我有了带有两个提交按钮的表单:

@helper.form(routes.Order.editOrder,'class -> "form-horizontal") {
   @helper.inputText(
      PlayMagicForJava.javaFieldtoScalaField(editOrderForm("date")),
      '_label -> "Date:",
      '_help -> ""
   )
   @helper.inputText(
      PlayMagicForJava.javaFieldtoScalaField(editOrderForm("place_from")),
      '_label -> "From:",
      '_help -> ""
   )
   <button type="submit" name="edit" id="edit" class="btn btn-primary">Edit Order</button>
   <button type="submit" name="remove" id="remove" value="remove" class="btn">Remove order</button>
}
@helper.form(routes.Order.editOrder,'class->“form horizontal”){
@helper.inputText(
PlayMagicForJava.javaFieldtoScalaField(编辑订单(“日期”),
“_标签->日期:”,
“\u帮助->”“
)
@helper.inputText(
PlayMagicForJava.javaFieldtoScalaField(编辑订单(“place_from”)),
“_label->”From:”,
“\u帮助->”“
)
编辑顺序
取消订单
}
仅用于编辑的窗体控件中的My函数:

public static Result editOrder(){
 Order user = User.findByEmail(session("email"));
 Form<Order> editOrderFormFilled = editOrderForm.bindFromRequest();
 Order order = Order.findByID(editOrderFormFilled.get().id);
     if(editOrderFormFilled.hasErrors()) {
         return badRequest();
     }
     else if(user.id != order.created_by){
         return badRequest();
     }else{
        return OK();
     }
 }
公共静态结果editOrder(){
订单用户=user.findByEmail(会话(“电子邮件”);
表单editOrderFormFilled=editOrderForm.bindFromRequest();
Order-Order=Order.findByID(editOrderFormFilled.get().id);
if(editOrderFormFilled.hasErrors()){
返回请求();
}
else if(user.id!=订单创建人){
返回请求();
}否则{
返回OK();
}
}

如何处理提交的按钮?

所选按钮的
属性将作为任何其他字段发送到服务器。因此,在控制器内部,您可以在请求主体中访问该值并决定执行什么操作

模板:

编辑顺序
取消订单
控制器:

公共静态结果myAction(){
字符串[]postAction=request().body().asFormUrlEncoded().get(“操作”);
if(postAction==null | | postAction.length==0){
return badRequest(“您必须提供有效的操作”);
}否则{
String action=postAction[0];
如果(“编辑”。等于(动作)){
返回编辑(请求());
}else if(“删除”。等于(操作)){
返回删除(request());
}否则{
返回请求(“不允许此操作”);
}
}
}
私有静态结果删除(请求){
//待办事项
返回ok(“在此处执行您的业务”);
}
私有静态结果编辑(请求){
//待办事项
返回ok(“在此处执行您的业务”);
}
为了补充您的答案,您可以在Scala控制器中执行以下操作:

def handle=Action{implicit request=>
request.body.asFormUrlEncoded.get(“action”).headOption匹配{
案例部分(“编辑”)=>Ok(“单击编辑”)
案例部分(“删除”)=>确定(“单击删除”)
案例=>BadRequest(“不允许此操作”)
}
}
以补充“和”的答案,如果表单使用错误进行验证。如果该表单刚刚返回,则操作保持不变。因此,过滤掉该动作会在下次给出正确的动作

val postAction:String=request.body.asFormUrlEncoded.get(“action”).head
//绑定表单请求。
val bindFromRequest:Form[CaseClass]=CaseOriginalForm.bindFromRequest
bindFromRequest.fold(
formWithErrors=>{
//过滤掉动作按钮数据(否则第一个动作返回)
val filterNot:Map[String,String]=formWithErrors.data.filterNot(f=>f.。\u 1==“操作”)
val formWithErrors2=CaseOriginalForm.bind(filterNot)
BadRequest(views.html.FormPage(forms2))
},
联系人=>{
确定(“成功页面”+邮递)
}
)

HTML表单不能有两个提交按钮。您可以使用Javascript解决这个问题(例如更改“onsubmit”回调中的操作url)。这不是一个特别关注Play2的问题,我想我已经在PHP中使用了两个提交按钮。例如,这应该适用于PHPOk,它可能:)对不起我的错误!我会检查Play2I,我也这么做了,但对我来说动作是空的(虽然不是空的)!有什么线索吗?
request.body.asFormUrlEncoded.get(“submit”).headOption
实际上在merequest.body.asFormUrlEncoded中是空的,但form.data包含该值。