我正在使用 jquery 为 Controller 发送“详细信息”的 JSON:
HTML 详细信息:
<!-- Endereço -->
<div class="panel panel-default">
<div class="panel-heading">Endereço</div>
<div class="panel-body">
<div class="form-group">
<label class="col-sm-2 control-label" for="complement">
* Complemento: </label>
<div class="col-sm-6">
<input type="text" class="form-control" id="complement" name="complement">
</div>
<label class="col-sm-2 control-label" for="cep"> CEP: </label>
<div class="col-sm-2">
<input type="text"
pattern="[0-9]{2}[\.]?[0-9]{3}[-]?[0-9]{3}"
title="Formato: xx.xxx-xxx ou xxxxxxxx"
placeholder="xx.xxx-xxx ou xxxxxxxx" class="form-control"
id="cep" name="cep">
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="reference">
Referência: </label>
<div class="col-sm-6">
<input type="text" class="form-control" id="reference"
name="reference">
</div>
<label class="col-sm-2 control-label" for="number">
Número: </label>
<div class="col-sm-2">
<input type="text" class="form-control" id="number"
name="number" pattern="[0-9]">
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="neighborhood">*
Bairro: </label>
<div class="col-sm-7">
<input type="text" class="form-control" id="neighborhood"
name="neighborhood">
</div>
<label class="col-sm-2 control-label" for="principal">*
Principal: </label>
<div class="col-md-1">
<input type="checkbox" name="principal" class="form-control"
id="principal"
title="Informa se o endereço é o principal ou não">
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<div class="pull-right">
<button type="button" id="add_row"
class="btn btn-primary glyphicon glyphicon-plus">Adicionar</button>
</div>
</div>
</div>
表格 HTML - 详细信息:
<div class="panel panel-default">
<div class="panel-body">
<div class="row clearfix">
<div class="col-md-12 table-responsive">
<table class="table table-bordered table hover table-sortable" id="tab_logic">
<thead>
<tr>
<th class="text-center">CEP</th>
<th class="text-center">Complemento</th>
<th class="text-center">Referência</th>
<th class="text-center">Número</th>
<th class="text-center">Bairro</th>
<th class="text-center">Endereço principal</th>
<th class="td-actions text-center">
@Messages("table.column.option")
<th>
</tr>
</thead>
<tbody id="bodyTable">
<tr id='addr0' data-id="0" class="hidden">
<td data-name="cep"></td>
<td data-name="complement"></td>
<td data-name="reference"></td>
<td data-name="number"></td>
<td data-name="neighborhood"></td>
<td data-name="principal"></td>
<td data-name="del">
<button name="del0"
class='btn btn-danger glyphicon glyphicon-remove row-remove'>
</button>
</td>
</tr>
<tbody>
</table>
</div>
</div>
</div>
</div>
我的代码js:
<script src="@routes.StudentController.jsRoutes()" type="text/javascript"></script>
<script type="text/javascript">
var jsonObj = [];
$(document).ready(function() {
$("#add_row").on("click", function() {
item = {}
item["complement"] = $('#complement').val();
item["cep"] = $('#cep').val();
item["reference"] = $('#reference').val();
item["number"] = $('#number').val();
item["neighborhood"] = $('#neighborhood').val();
item["principal"] = $('#principal').is(':checked') ? "Sim" : "Não";
// Get max row id and set new id
var newid = 0;
$.each($("#tab_logic tr"), function() {
if (parseInt($(this).data("id")) > newid) {
newid = parseInt($(this).data("id"));
}
});
newid++;
var tr = $("<tr></tr>", {
id: "addr"+newid,
"data-id": newid
});
// loop through each td and create new elements with name of newid
$.each($("#tab_logic tbody tr:nth(0) td"), function() {
var cur_td = $(this);
var children = cur_td.children();
// add new td and element if it has a nane
if ($(this).data("name") != undefined) {
var td = $("<td></td>", {
"data-name": $(cur_td).data("name"),
"text" : item[$(cur_td).data("name")]
});
var c = $(cur_td).find($(children[0]).prop('tagName')).clone().val("");
c.attr("name", $(cur_td).data("name") + newid);
c.appendTo($(td));
td.appendTo($(tr));
}
});
// add the new row
$(tr).appendTo($('#tab_logic'));
$(tr).find("td button.row-remove").on("click", function() {
$(this).closest("tr").remove();
});
item['principal'] = $('#principal').is(':checked') ? true : false;
jsonObj.push(item);
//Access to the Controller StudentController using js Routes
appRoutes.controllers.StudentController.createAddress().ajax({
data : JSON.stringify(jsonObj),
contentType : 'application/json',
success : function (obj) {
console.log(obj);
}
});
});
// Sortable Code
var fixHelperModified = function(e, tr) {
var $originals = tr.children();
var $helper = tr.clone();
$helper.children().each(function(index) {
$(this).width($originals.eq(index).width())
});
return $helper;
};
$(".table-sortable tbody").sortable({
helper: fixHelperModified
}).disableSelection();
$(".table-sortable thead").disableSelection();
$("#add_row").trigger("click");
});
</script>
我的控制器:
@Security.Authenticated(PlayAuthenticatedSecured.class)
public class StudentController extends Controller {
private static final Form<Student> studentForm = Form.form(Student.class);
private static List<Address> addresses;
@Transactional
public static Result gravar() throws IOException {
Form<Student> form = studentForm.bindFromRequest();
//Hidden Codes
Student student = form.get();
student.getAddresses().addAll(addresses);
student.save();
flash("success", Messages.get("msg.success2"));
return redirect(routes.StudentController.lista());
}
public static Result createAddress() {
addresses = new ArrayList<Address>(3);
JsonNode json = request().body().asJson();
for (Iterator<JsonNode> item = json.iterator(); item.hasNext();) {
Address address = Json.fromJson(item.next(), Address.class);
addresses.add(address);
}
return ok();
}
public static Result jsRoutes() {
response().setContentType("text/javascript");
return ok(Routes.javascriptRouter("appRoutes",
routes.javascript.StudentController.createAddress()
));
}
//Other methods
}