平台:Spring 3.1.2、Tomcat 7.0.30
从 3.0 升级到 Spring 3.1 后出现此问题
我有一个正常的启用 Spring 的表单:
<c:url value='/healthcare/insurance/policy/save' var="url" /> <form:form commandName="insurancePolicy" action="${url }" method="POST" cssClass="form-horizontal"> <div class="module"> <div class="header"> <strong><spring:message code="insurance.policy.view.formbox" /> </strong> </div> <div class="module-content row-fluid"> <div class="span4"> <div class="control-group"> <label class="control-label"><spring:message code="insurance.policy.view.policyId" /></label> <div class="controls"> <form:input path="policyId" cssClass="span10" readonly="true" /> </div> </div> <div class="control-group"> <label class="control-label"><spring:message code="insurance.policy.view.tpaId" /></label> <div class="controls"> <form:select path="tpaId" items="${tpas }" itemLabel="tpaName" itemValue="tpaId" cssClass="span10" /> </div> </div>
等等。
我提交的方式是:
function save(){
$("#insurancePolicy").submit();
}
我捕获的方式是通过位于抽象类中的 Controller ,如下所示:
public abstract class AbstractCrudViewController<T, PK extends Number, META extends T> extends AbstractViewController {
@SuppressWarnings("unchecked")
@RequestMapping(value="/save", method = RequestMethod.POST)
protected String save(@ModelAttribute T t, Model model, HttpServletRequest request){
logger.debug("Executing save for model: {}", t.toString());
try{
if (getPrimaryKeyValue(t) == null || ((Number) getPrimaryKeyValue(t)).intValue() <=0 ){
logger.debug("Creating new record");
PK pk = getCrudService().create(t);
logger.debug("New record created with ID: {}", pk);
ViewUtil.addSuccess(model, "crud.saveSuccess", request, getPrimaryKeyValue(t));
}
初始化绑定(bind)器在 AbstractViewController 中声明为:
public abstract class AbstractViewController {
@InitBinder
public void initBinder(WebDataBinder binder) {
String dateFormat = "dd/MM/yyyy";
binder.registerCustomEditor(DateTime.class, new DateTimeEditor(dateFormat,true));
}
}
好的。现在的问题是:我正在保存表单,日志显示:
DEBUG:com.keype.hawk.hr.mvc.StaffViewController[save]:Executing save for model: Staff [staffId=null, firstName=Steve,, lastName=Harris,, middleName=,, nationality=AF, dob=2012-09-11T00:00:00.000+03:00, status=1000, title=Mr, address1=, address2=, city=, state=, postalCode=, country=AF, homePhoneAreaCode=, homePhone=,, homePhoneExt=, homePhoneAllowSoliciation=, workPhoneAreaCode=, workPhone=null, workPhoneExt=, workPhoneAllowSoliciation=, fax=, mobileAreaCode=, mobile=, mobileAllowSolicitation=, email=null, joiningDate=null, gender=, govtId=, maritalStatus=, passportNumber=, passportExpiryDate=null, totalWorkExperience=, notes=, staffCreated=null, staffModified=null, dateCreated=null, dateModified=null]
注意每个字段后面的逗号。
为了调试,我使用 jquery serialize 序列化了表单并进行了检查,发现其中没有逗号。然后 ajax 将此数据发布到服务器,并在 @ModelAttribute 完成其工作后,附加逗号。
有什么想法吗?与 Init 绑定(bind)器有关的东西吗?
最佳答案
我遇到了同样的问题,但 Twitter Bootstrap 不是原因。
就我而言,我们有 2 个具有相同名称属性的输入。在这种情况下,这两个输入的数据将作为数组发送。由于我的输入为空,因此数组为 myName=,
关于jquery - @ModelAttribute 出现奇怪的逗号附加问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12395490/