我正在开发一个Spring MVC应用程序,我对如何提交表单有以下疑问:
<form:form action="consultazioneRicercaForm" method="post" modelAttribute="consultazioneFilter" id="ricercaForm">
<div class="form-group">
<div class="row">
<div class="col-md-4">
<label style="display: block;">Regione:</label>
<%-- <form:select path="codiceRegione" id="selReg" class="requiredGroup1 form-control" name="selReg"> --%>
<form:select path="codiceRegione" id="selReg" class="form-control" name="selReg">
<form:option value="" label="--SELEZIONARE UNA REGIONE--"/>
<form:options items="${listaRegioni}" itemLabel="desReg" itemValue="codReg" />
</form:select>
</div>
<div class="col-md-4">
<label style="display: block;">Provincia:</label>
<form:select path="codiceProvincia" id="selProv" class="form-control"></form:select>
</div>
<div class="col-md-4">
<label style="display: block;">Codice Meccanografico:</label>
<form:input path="codiceMeccanografico" id="selCodMec" class="form-control" name="codMec" minlength="4" />
<%-- <form:input path="codiceMeccanografico" id="selCodMec" class="requiredGroup1 form-control" name="codMec" minlength="4" /> --%>
</div>
</div>
<div class="row" style="margin-top: 30px;">
<div class="col-md-4">
<label style="display: block;">Stato Progetto:</label>
<form:select path="statoProgetto" id="selStatoProgetto" class="form-control">
<form:option value="" label="--STATO PROGETTO--"/>
<form:options itemLabel="descrizione" itemValue="codice" items="${listaDescrizioneStatoProgetto}"/>
</form:select>
</div>
<div class="col-md-4">
<label style="display: block;">Gruppo Tipologie Progetto:</label>
<form:select path="gruppoTipologie" id="selGruppoTipologie" class="form-control" name="selGruppoTipologie">
<form:option value="" label="--GRUPPO TIPOLOGIE--"/>
<form:options itemLabel="desTipGru" itemValue="codTipGru" items="${listaGruppi}"/>
</form:select>
</div>
<div class="col-md-4">
<label style="display: block;">Tipologia Progetto:</label>
<%-- <form:select path="tipologiaProgetto" id="selTipologiaProgetto" class="form-control">
<form:option value="" label="--TIPOLOGIA--"/>
<form:options itemLabel="descrizione" itemValue="codice" items="${listaDescrizioneTipologiaProgetto}" />
</form:select> --%>
<form:select path="tipologiaProgetto" id="selTipologiaProgetto" class="form-control">
</form:select>
</div>
</div>
<div class="row" id="dataTrasmissioneDiv" style="margin-top: 30px;">
<div class="col-md-4">
<label id="dataTrasmissioneLabel" style="display: block;">Data Trasmissione:</label>
<form:select path="dataTrasmissione" id="selDataTrasmissione" class="form-control">
<form:option value="" label="--DATA TRASMISSIONE--"/>
<form:options itemLabel="descrizione" itemValue="codice" items="${listaDateTrasmissione}"/>
</form:select>
</div>
</div>
<div class="row" style="margin-top: 30px;">
<div class="col-md-12">
<input type="button" value="Cerca" class="btn btn-default" onClick="submitConsultazione()" />
<input type="button" value="Pulisci filtri" class="btn btn-default" onClick="pulisciFiltriConsultazione()" />
</div>
</div>
</div>
</form:form>
如您所见,此表单使用Spring MVC taglib。
在特定情况下,此表单以这种方式声明:
<form:form action="consultazioneRicercaForm" method="post" modelAttribute="consultazioneFilter" id="ricercaForm">
根据我的理解(如果我做错了断言,请纠正我)意味着:
action =&#34; consultazioneRicercaForm&#34; :这是我提交表单时调用的资源(所以我需要一个控制器方法来处理对的POST请求consultazioneRicercaForm 资源)。
方法=&#34;发布&#34; :表示该请求是 POST 请求。
modelAttribute =&#34; consultazioneFilter&#34; :这是一个模型属性(由控制器在模型中推出,呈现包含前一个表单的页面)存储了表单中插入的值。
因此,这意味着当用户提交表单时,必须从处理 consultazioneRicercaForm 资源的控制器中检索此inynialized模型属性。
我的推理是否正确?
现在我的主要疑问是。正如您所看到的,此表单不是以经典方式提交的,而是有这个按钮:
<input type="button" value="Cerca" class="btn btn-default" onClick="submitConsultazione()" />
单击它时,调用 submitConsultazione() JavaScriot函数,这是代码:
function submitConsultazione() {
if($('#ricercaForm').valid()){
var fd = new FormData();
var filtro = {
selReg : $('#selReg').val(),
selProv : $('#selProv').val(),
selCodMec : $('#selCodMec').val(),
selTipologiaProgetto : $('#selTipologiaProgetto').val(),
selStatoProgetto : $('#selStatoProgetto').val(),
selDataTrasmissione : $('#selDataTrasmissione').val(),
selGruppoTipologie : $('#selGruppoTipologie').val(),
};
fd.append('filtro', JSON.stringify(filtro));
$.ajax({
type : "POST",
url : "ricericaConsultazione",
data : fd,
processData : false,
contentType : false
}).done(function(response) {
// $('#outputRicerca').html(response);
sostituisciFrammentoJsp('outputRicerca', response);
showSuccessMessage('Ricerca completata');
}).error(function(xhr) {
manageError(xhr);
});
}
}
所以基本上这个函数是手动检索在表单字段中插入的值,并将这些值放入一个JSON对象中,该对象将被检索到处理Http POST请求的方法 ricericaConsultazione resource(与前一个表单上action属性定义的资源不同)。
那究竟是什么意思呢?看来他们已经声明了一个使用 form taglib 的Spring表单,但是没有使用表单taglib 功能,而是手动执行表单sumbit。
是真的还是我错过了什么?
答案 0 :(得分:1)
是。声明Spring表单并手动完成表单提交,这在javascript函数submitConsultazione()中发生。
但是这里有弹簧形式的用法。
如果你注意到,有一些形式:选择元素,当渲染时将呈现为html选择,其中也包含一些选项。我们可以使用form:options标记来获取项目列表,项目标签和项目值,而不是循环遍历所有值并打印它们。
模型属性(也称为表单bean)可能包含一些值。因此,要使用我们可以手动执行的那些值填充相应的html表单字段
<input value="${formBean.stringValueProperty}" >
或通过spring form标签
<form:input path="stringValueProperty" />
表单标记可以轻松预先填充值。
使用Spring表单标签及其工作原理:
Spring表单用于在呈现和处理提交的请求时绑定html字段和表单bean。在渲染html时,必须正确生成表单bean属性名,以便在处理提交的请求时,请求参数正确映射到表单bean属性。
虽然我觉得Spring表单标签没有按原样使用。不确定此代码作者的要求和意图。