【发布时间】:2015-10-16 09:43:33
【问题描述】:
我在 jQuery 对话框中验证表单时遇到问题。在这个项目中,我也在使用瓷砖。那是我的代码:
控制器:
@RequestMapping(value = "/popupOpen.do")
protected ModelAndView popupOpen(@RequestParam String idDivisaValor, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
{
ModelAndView mav = new ModelAndView();
// Obtain object
DivisaValor divisaValor = gestorCoberturas.obtenerDivisaValor(idDivisaValor);
mav.addObject("divisaValor", divisaValor);
// Add selector list
ArrayList<Divisa> divisas = new ArrayList<Divisa>(gestorDivisas.obtenerDivisas());
mav.addObject("divisas", divisas);
mav.setViewName("/ajax/mantenimiento/divisas/crearModificarDivisaValor");
return mav;
}
@RequestMapping(value = "/popupSave.do")
protected ModelAndView popupSave(@Valid DivisaValor divisaValor, BindingResult result, HttpServletRequest request,
HttpServletResponse response) throws IOException, ServletException
{
ModelAndView mav = new ModelAndView();
if (result.hasErrors())
{
// Mark error to ajax return
response.setStatus(HttpServletResponse.SC_CONFLICT);
// Selector de divisas
ArrayList<Divisa> divisas = new ArrayList<Divisa>(gestorDivisas.obtenerDivisas());
request.setAttribute("divisas", divisas);
// Validate name if exists
if (gestorDivisas.existeNombre(divisaValor.getNombre()))
result.addError(new ObjectError("divisaValor", "El nombre seleccionado ya existe"));
mav.addObject("divisaValor", divisaValor);
mav.setViewName("/ajax/mantenimiento/divisas/crearModificarDivisaValor");
}
else
{
// ALL OK
gestorCoberturas.modificarDivisaValor(divisaValor);
// redirect to the table list
mav.setViewName("redirect:/mantenimiento/divisas/crearModificarCobertura.do?idCoberturaDivisas="
+ divisaValor.getCobertura().getId());
}
return mav;
}
打开对话框的 JSP:
//JSP (crearModificarCobertura.jsp)
............
......
<script>
function modificarDivisaValor(idDivisaValor) {
$("#idDivisaValor").val(idDivisaValor);
openDialog("./popupOpen.do","#dialog", "Modificar divisa valor", "380", "220");
}
function openDialog(url, idDiv, title, width, height) {
popupDialog.dialog('option', 'title', title);
popupDialog.dialog('option', 'width', width);
popupDialog.dialog('option', 'height', height);
popupDialog.html('');
loadPopup(url, idDiv);
popupDialog.dialog('open');
}
function loadPopup(url, target) {
$.ajax({
url : url,
method : "POST",
//ADD form
data : $('#frm_anadirEditarCobertura').serialize(),
success : function(data) {
$("#dialog").html(data);
},
error : function(data) {
console.log('VALIDATE');
}
});
}
</script>
...........
<div id="dialog" title="Basic dialog"></div>
<a class="botonModificar" href="javascript:modificarDivisaValor('${dv.id}')"></a>
<form id="frm_anadirEditarCobertura" action="/popupOpen.do" method="post">
<input id="idDivisaValor" type="hidden" name="idDivisaValor" value="" />
..
</form>
这是在 de 对话框中加载的 JSP:
// JSP (crearModificarDivisaValor.jsp) Content loaded inside popup
<script>
........
..
function sendFormPopUp(idForm){
var url = "/popupSave.do";
$.ajax({
url : url,
method : "POST",
//AÑADO EL FORMULARIO DE COBERTURA DE DIVISAS
data : $(idForm).serialize(),
success : function(data, status) {
$("html").html('data');
},
statusCode: {
//CONFLICT- ERROR EN LA VALIDACION
409: function(data) {
console.log('ERROR');
$("#dialog").html(data);
}
}
});
}
</script>
<div id="anadirEditarDivisaValorContainer">
<fieldset class='gris' style="display:block">
<form:errors path="divisaValor" cssClass="errormessage" element="div"/>
<legend>Divisa valor</legend>
<form id="frm_anadirEditarDivisaValor" action="" method="post">
<input id="idDivisaValor" type="hidden" name="id" value="${divisaValor.id}" />
<input type="hidden" name="coberturaDivisas.id" value="${idCoberturaDivisas}" />
<table cellspacing="10px">
<tr>
<td>
<label style="width: 35px">Divisa</label>
</td>
<td>
<select id="select_divisa" name="divisa.codigo" class="required" style="width: 190px">
<c:forEach var="d" items="${divisas}">
<option value="${d.codigo}" ${d.codigo == divisaValor.divisa.codigo ? 'selected="selected"' : ''}>${d.nombreDivisa}</option>
</c:forEach>
</select>
</td>
</tr>
<tr>
<td>
<label style="width: 35px">Valor (%)</label>
</td>
<td>
<input id ="input_valor" type=text style="width:35px" name="valor" value="${!empty divisaValor.valor ? divisaValor.valor : 0.00}"/>
<form:errors path="divisaValor.valor" />
</td>
</tr>
</table>
</form>
</fieldset>
<br>
<div align="right" id="container">
<a id="btnGuardarDV" href="javascript:sendFormPopUp('#frm_anadirEditarDivisaValor')"></a>
<a id="btnCancelar" href="javascript:cerrarPopUp()"></a>
</div>
</div>
我正在尝试使用 ajax 发送对话框表单并使用 CONFLICT 状态标记响应以在对话框 div 中加载 html 数据,否则我想在所有页面中加载 html,但它不起作用。
有人知道这样做吗?
感谢您的帮助!
【问题讨论】:
-
当然我的想法是显示对话框,发送表单并验证它。如果一切正常,我需要重新加载第一页(包含打开的弹出脚本),否则我需要在对话框中显示验证错误
标签: jquery validation dialog tiles