1

ここで簡単な質問をします (そう願っています)。私は webapp を開発しており、ajax を使用して投稿を送信しようとしています。これは初めてうまくいきます...同じセッション中の2回目の試みでは、サーバーに送信されたモデル属性が最初のものです。モデルの新しいインスタンスを送信しても、どういうわけかリセットされません。いくつかのコードを追加しましょう:

コントローラ:

    @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</button> --> 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);
        }
    });

}

モデル属性をリセットするために、プロセスのどこかで特にモデル属性を破棄する必要がありますか? それとも、私はここで本当に悪いことをしていますか?

前もって感謝します!

4

1 に答える 1

0

Model属性は、1 つの要求の間のみ「有効」です。処理中に属性に追加され、HttpServletRequestJSP で使用できるようになります。

@ModelAttributeここで行うように、ハンドラーメソッドのパラメーターリストで使用する場合

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

Spring は、リクエスト パラメータからオブジェクトを作成しようとします。あなたはあなたの中にこれらの数を持っていますProductor.jsp<form:input>要素。POST を実行するたびに、それらを使用してProductorオブジェクトが作成されます。

于 2013-10-02T20:32:27.057 に答える