Spring MVC模型属性没有被重置

时间:2013-10-02 20:12:08

标签: jquery spring-mvc modelattribute

在这里快速提问(希望如此)。我正在开发一个webapp,并尝试使用ajax进行post submition。这工作正常,第一次......在同一会话期间的第二次尝试中,发送到服务器的模型属性是第一次。不知怎的,即使我发送了一个新的模型实例,它也没有被重置。让我添加一些代码:

控制器:

    @RequestMapping(value = "/productores/new.html", method = RequestMethod.GET)
public ModelAndView newForm(){      
    log.info("Cargando form de productor...");  
    return new ModelAndView("/secure/Productor","productor",new Productor());       
}

@RequestMapping(value = "/productores/new.html",method = RequestMethod.POST)
public ModelAndView processNewForm(
        @ModelAttribute("productor") Productor prod, 
        BindingResult result, SessionStatus status){

    log.info("Procesando nuevo productor.");    
    prodServ.guardar(prod);
    return null;

}

Productores.jsp(这个页面包含一个显示所有生成器的网格,并有一个显示表单的按钮,作为模态对话框。这是使用jquery ui对话框。)

    function showDialog() {
    var tag = $("<div id='modalForm'></div>");
    $.ajax({
        type : "GET",
        url : "/SegurosWeb/productores/new.html",
        success : function(response) {
            if (typeof response == "object" && data.html) { //response is assumed to be JSON
                tag.html(response.html).dialog({
                    modal : options.modal
                }).dialog("open");
            } else { //response is assumed to be HTML
                tag.html(response).dialog({
                    modal : true,
                    position: ["center", "center"],
                    width : 1000
                }).dialog("open");
            }
        }
    });
}

Productor.jsp(这是将在模态对话框中加速的形式)

            <form:form id="formProductor" method="POST" commandName="productor"
    class="formgeneral" onsubmit="doAjaxPost('/SegurosWeb/productores/new.html');return false;">
    <div id="row">
        <div id="separador">
            <p class="separador">Datos del Productor</p>
        </div>
        <ul>
            <li><form:label path="apellido">Apellido:</form:label> <form:input
                    path="apellido" type="text" class="formL" required="required" /></li>
            <li><form:label path="nombre">Nombre:</form:label> <form:input
                    path="nombre" type="text" class="formL" required="required"></form:input></li>
            <li><form:label path="matricula">Matrícula:</form:label> <form:input
                    path="matricula" type="number" class="formM" pattern="[0-9]{9}"
                    title="Ingrese la matricula del Productor (solo numeros)" /></li>
        </ul>
    </div>
    <!--fin de row-->
    <div id="botoneraform">

Ingresar&LT; /按钮&GT; - &GT;             Ingresar             Cancelar              

和其中的ajax帖子

<script type="text/javascript">
function doAjaxPost(toUrl) {
    var a=$("#formProductor").serialize();
    $.ajax({
        type : "POST",
        url : toUrl,
        data: a,
        success : function(response) {
            $('#modalForm').dialog('close');
            $('#grid').trigger('reloadGrid');
        },
        error : function(jqXHR, textStatus, errorThrown) {
            alert(jqXHR + " : " + textStatus + " : " + errorThrown);
        }
    });

}

我是否需要在进程中的某处专门销毁模型属性才能重置它?或者我在这里做得非常糟糕?

提前致谢!

1 个答案:

答案 0 :(得分:0)

Model属性仅在一个请求的持续时间内“存活”。在处理过程中,它们被添加到HttpServletRequest属性中,然后可用于JSP。

在处理程序方法'参数列表中使用@ModelAttribute时就像在这里一样

public ModelAndView processNewForm(
        @ModelAttribute("productor") Productor prod, 
        BindingResult result, SessionStatus status){

Spring尝试从您的请求参数创建Object。你的Productor.jsp中有很多这样的,即。 <form:input>个元素。每次执行POST时,都会使用这些来创建Productor对象。