Search code examples
scala-2.10playframework-2.2

How to get some forms from request?


So, I've this form in server side:

case class Employe(id: Int, name: String)
val myForm = Form(
  mapping(
    "id" -> number,
    "name" -> text
  ) (Employe.apply) (Employe.unapply)
)

So, in client side I need send three same forms to the server:

<html>
  <body>
    <div class="employe">
      <input type="number" class="employe_id"/>
      <input type="text" class="employe_name"/>
    </div>  
    <div class="employe">
      <input type="number" class="employe_id"/>
      <input type="text" class="employe_name"/>
    </div>  
    <div class="employe">
      <input type="number" class="employe_id"/>
      <input type="text" class="employe_name"/>
    </div>  
    <input type="button" id="send_button"/>
  </body>
</html>

and this data I send to the server via ajax with following code:

var allEmployes = $('.employe');
var addUrl = '/employes/add';
var employesArray = [];
for(var i = 0; i < allEmployes.length; i++) {
    var currentRow = $(allEmployes[i]);
    var emplId = currentRow.find('.employe_id').val();
    var emplName = currentRow.find('employe_name').val();
    var employe = {
        'id' : emplId,
        'name': emplName 
    };
    employesArray.push(employe);
}
$.post(addUrl, { 'employes': employesArray })
.done(function(response){
    console.log(response);
})
.fail(function(error){
    console.log(error);
});

but, I don't know how to get three same forms from request (in Action of Server side)? Anybody know how to can this?

Thanks in Advance!


Solution

  • In controller change form mapping as

    val myForm = Form( mapping( "id" -> list(number), "name" -> list(text) ) (Employe.apply) (Employe.unapply) )

    and in html

    <div class="employe">
      <input type="number" name="id[0]" />
      <input type="text" name="name[0]" />
    </div>  
    <div class="employe">
      <input type="number" name="id[1]" />
      <input type="text" name="name[1]" />
    </div>  
    <div class="employe">
      <input type="number" name="id[2]" />
      <input type="text" name="name[2]" />
    </div>