2012-12-22 18 views
6

मेरे पास ऑर्डर संपादन के लिए फॉर्म था लेकिन मुझे ऑर्डर हटाने के लिए बटन जोड़ना पड़ा। बस संपादन के लिए फार्म के लिएप्लेफ्रेमवर्क फॉर्म और दो सबमिट बटन

@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> 
} 

मेरे controler में समारोह: अब मैं दोनों के साथ प्रपत्र बटन सबमिट करें

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(); 
    } 
} 

मैं कैसे संभाल कर सकते हैं कि कौन सा बटन सबमिट किया गया था?

+0

एक HTML फॉर्म में 2 सबमिट बटन नहीं हो सकते हैं। आप जावास्क्रिप्ट के साथ इस समस्या को हल कर सकते हैं (उदाहरण के लिए "ऑनसबमिट" कॉलबैक में एक्शन-यूआरएल बदलें)। यह विशेष रूप से Play2 चिंता नहीं है। –

+0

मुझे लगता है कि मैंने अभी तक PHP में 2 सबमिट बटन का उपयोग किया है। उदाहरण के लिए यह PHP [लिंक] के लिए काम करना चाहिए (http://blog.theonlytutorials.com/multiple-submit-button-in-a-single-form-with-php/) –

+0

ठीक है, यह संभव है :) http://stackoverflow.com/questions/942772/html-form-with-two-submit-buttons-and-two-target-attributes मेरी गलती के लिए खेद है! मैं Play2 –

उत्तर

18

value चयनित बटन की संपत्ति सर्वर पर किसी भी अन्य फ़ील्ड के रूप में भेजी जाती है। तो, अपने नियंत्रक के अंदर, आप अनुरोध मूल्य में इस मान का उपयोग कर सकते हैं और तय कर सकते हैं कि क्या करना है।

टेम्पलेट:

<button type="submit" name="action" value="edit">Edit order</button> 
<button type="submit" name="action" value="remove">Remove order</button> 

नियंत्रक:

public static Result myAction() { 
    String[] postAction = request().body().asFormUrlEncoded().get("action"); 
    if (postAction == null || postAction.length == 0) { 
    return badRequest("You must provide a valid action"); 
    } else { 
    String action = postAction[0]; 
    if ("edit".equals(action)) { 
     return edit(request()); 
    } else if ("remove".equals(action)) { 
     return remove(request()); 
    } else { 
     return badRequest("This action is not allowed"); 
    } 
    } 
} 

private static Result remove(Request request) { 
    // TODO 
    return ok("implement your business here"); 
} 

private static Result edit(Request request) { 
    // TODO 
    return ok("implement your business here"); 
} 
+0

के लिए जांच करूंगा यह काम करता है। आपका बहुत बहुत धन्यवाद। –

+1

मैंने वही किया, लेकिन मेरे लिए कार्रवाई खाली है (हालांकि शून्य नहीं है)! कोई सुराग? – Hossein

10

Julien Lafont के जवाब complemente के लिए, यहाँ आप एक स्काला नियंत्रक में क्या कर सकते हैं यह है:

def handle = Action { implicit request => 
    request.body.asFormUrlEncoded.get("action").headOption match { 
    case Some("edit") => Ok("Clicked edit") 
    case Some("remove") => Ok("Clicked remove") 
    case _ => BadRequest("This action is not allowed") 
    } 
} 
+0

'request.body.asFormUrlEncoded.get (" सबमिट करें ")। HeadOption' वास्तव में मेरे लिए काम किया –

+0

request.body.asFormUrlEncoded मेरे अपने मामले में खाली था, लेकिन form.data में मान शामिल है। – keni

1

Julien Lafont की मदद के लिए एक और फार्म के मामले में OlivierBlanvillain का जवाब एक त्रुटि के साथ मान्य करता है। अगर कार्रवाई वापस आती है तो कार्रवाई वही रहती है। तो उस कार्रवाई को फ़िल्टर करना अगली बार एक सही कार्रवाई देता है।

val postAction: String = request.body.asFormUrlEncoded.get("action").head 

    // bind the form request. 
    val bindFromRequest: Form[CaseClass] = CaseOriginalForm.bindFromRequest 
    bindFromRequest.fold(
    formWithErrors => { 
     // filter out the action button data (otherwise the first action comes back) 
     val filterNot: Map[String, String] = formWithErrors.data.filterNot(f => f._1 == "action") 
     val formWithErrors2= CaseOriginalForm.bind(filterNot) 
     BadRequest(views.html.FormPage(formWithErrors2)) 
    }, 
    contact => { 
     Ok("Succes page " + postAction) 
    } 
) 
संबंधित मुद्दे