Estou com um problema quando tento salvar os dados de um cadastro usando o Chrome. Se uso o FireFox funciona.
Tenho a página jsp abaixo como cadastro:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<c:if test="${not empty errors}">
<c:forEach items="${errors}" var="error">
${error.category} - ${error.message}<br />
</c:forEach>
</c:if>
<form action="${linkTo[ClienteController].salvar}" method="post" class="ajaxForm">
<fieldset>
<legend>Cadastro de Clientes</legend>
<br/>
<p>
<input type="hidden" name="cliente.id" value="${cliente.id}" />
<label for="txtNome">Nome: *</label>
<input type="text" id="txtNome" name="cliente.nome" value="${cliente.nome}" maxlength="255" autofocus="autofocus" />
</p>
<p>
<label for="txtEmail">Email: *</label>
<input type="text" id="txtEmail" name="cliente.email" value="${cliente.email}" maxlength="255" />
</p>
<p>
<label for="txtTelefone">Telefone:</label>
<input type="text" id="txtTelefone" name="cliente.telefone" value="${cliente.telefone}" maxlength="13" />
</p>
<p>
<label for="txtCelular">Celular:</label>
<input type="text" id="txtCelular" name="cliente.celular" value="${cliente.celular}" maxlength="13" />
</p>
<p>
<label for="txtCPF">CPF:</label>
<input type="text" id="txtCPF" name="cliente.cpf" value="${cliente.cpf}" maxlength="16" />
</p>
<p>
<label for="txtDtNascimento">Data de Nascimento:</label>
<input type="date" id="txtDtNascimento" name="cliente.dtNascimento" value="${cliente.dtNascimento}" maxlength="255" />
</p>
<p>
<label for="txtObs">Observações:</label>
<textarea rows="5" cols="20" name="cliente.observacoes">${cliente.observacoes}</textarea>
</p>
<p>
<button type="submit" class="btnSalvar">Salvar</button>
<button id="btnPesquisar" class="btnPesquisar" type="submit" >Pesquisar</button>
<button type="submit" class="btnExcluir" >Excluir</button>
<button id="btnCancelar" class="btnCancelar" type="reset" >Cancelar</button>
</p>
</fieldset>
</form>
Segue abaixo o código da chamada AJAX para salvar:
function configForm() {
var options = {
success : function(responseText, statusText, xhr, $form) {
if (statusText == 'success') {
$("table.display tbody tr").detach();
oTable.fnReloadAjax();
alternateButtons(false);
}else if(statusText == "error"){
console.log(statusText);
}
}, // post-submit callback
clearForm : true, // clear all form fields after successful submit
resetForm : true
};
$('.btnSalvar').click(function(e){
$('.ajaxForm').ajaxSubmit(options);
e.preventDefault();
});
$('.btnExcluir').live('click', function(e){
$('.ajaxForm').ajaxSubmit(options);
e.preventDefault();
});
actionRoot = $('.ajaxForm').attr('action');
}
O código do Controller. A execução para na linha: validator.onErrorSendBadRequest();
@Resource
public class ClienteController {
private final Result result;
private final Validator validator;
private final Clientes clientes;
public ClienteController(Clientes clientes, Result result, Validator validator){
this.clientes = clientes;
this.result = result;
this.validator = validator;
}
@Get("/cliente/")
public void index(){
}
@Get("/cliente/{id}")
public void form(Long id){
final Cliente cliente = clientes.obter(id);
result.use(Results.json()).from(cliente).recursive().serialize();
}
@Transaction
@Post("/cliente/")
public void salvar(Cliente cliente){
validator.validate(cliente);
validator.onErrorSendBadRequest();
clientes.saveOrUpdate(cliente);
result.nothing();
}
@Transaction
@Delete("/cliente/")
public void excluir(Cliente cliente){
clientes.excluir(cliente);
result.nothing();
}
@Get("/cliente/pesquisar/")
public void listar(Cliente cliente){
List<Cliente> resultado = clientes.pesquisar(cliente);
result.use(Results.json()).from(resultado).serialize();
}
@Get("/cliente/listar/")
public void listar(){
result.use(Results.json()).from(clientes.listarTodos()).serialize();
}
}
