这是Achinta,是Spring世界的新蜜蜂。我需要一点帮助来理解和解决我面临的问题。我希望能在这里找到答案。
我正在开发一个示例Spring Web项目。这里我有一个Controller,Bean类和一个用于UI和其他工件的Jsp页面。这是我的Bean课程。
@Entity
@Table(name = "tblLoadCriteria")
public class Load implements Serializable {
private Integer loadID;
private String loadCountry;
private String loadState;
private String loadCity;
private Integer totalAirVolume;
public Load() {//Constructor}
//And Getter & Setter methods for loadID, loadCountry, loadState, loadCity & totalAirVolume
}
我的Jsp页面中的Spring表单。
<form:form id="systemForm" commandName="load" action="${pageContext.request.contextPath}/doSothing" method="POST" >
<spring:message code="loadCountry" />: <form:input path="loadCountry" />
<spring:message code="loadState" />: <form:input path="loadState" />
<spring:message code="loadCity" />: <form:input path="loadCity" />
<spring:message code="totalAirVolume" />: <form:input path="totalAirVolume" />
<spring:message code="save" text="Save" scope="page" var="save" />
<input id="next" type="button" onClick="submitSave();" />
</form:form>
这里是控制器代码
@RequestMapping(value = "/doSothing", method = RequestMethod.POST)
public String doSothing(HttpServletRequest request, HttpServletResponse response, @ModelAttribute("load") @Valid Load load ,
BindingResult result, SessionStatus sessionStatus) {
loadService.saveLoad(load);
return "forward:getApplicationRequirements";
}
我面临的问题是,&#34; totalAirVolume&#34;在Load bean类中,它是Integer类型,并使用spring form标签绑定到UI页面。但是在UI中,如果我输入浮点值(F.Ex 12.12),而不是整数并提交页面,它会给我状态:400错误。
我不太热衷于javascript验证&#34; totalAirVolume&#34;字段和寻找Spring方式来处理它。请帮忙。
我们非常感谢您的回复。
此致 Achinta
答案 0 :(得分:0)
如果出现验证/转换错误,请像这样修改您的控制器以返回到表单:
@RequestMapping(value = "/doSothing", method = RequestMethod.POST)
public String doSothing(HttpServletRequest request, HttpServletResponse response, @ModelAttribute("load") @Valid Load load ,
BindingResult result, SessionStatus sessionStatus) {
// Return back to the form if the data is not valid
if (bindingResult.hasErrors()) {
return "yourFormViewName"; // Name of the view for your form
}
loadService.saveLoad(load);
return "forward:getApplicationRequirements";
}
将它放在JSP表单中:
<form:errors>
元素将显示服务器端验证/转换错误消息。
答案 1 :(得分:0)
首先,在将任何内容保存到数据库之前,最好检查每个字段是否有效。我看到你在模型对象'Load'之前添加@Valid,这意味着你想使用JSR-303来验证bean对象。但是,在bean类中,不添加注释来检查任何内容,例如@size。 检查此http://docs.spring.io/spring/docs/3.2.7.RELEASE/spring-framework-reference/htmlsingle/#validation-beanvalidation-overview,“7.8.1 JSR-303 Bean验证API概述”。
我建议您创建一个实现'org.springframework.validation.Validator'的验证器,而不是使用JSR-303 API,并制定规则。
在控制器中,在保存对象之前,请调用此验证程序以验证对象。如果有错误,请返回错误消息以强制输入正确的内容。
@RequestMapping(value =“/ doSothing”,method = RequestMethod.POST) public String doSothing(HttpServletRequest请求,HttpServletResponse响应,
LoadValidator lv=new LoadValidator ();
@ModelAttribute("load") @Valid Load load ,
BindingResult result, SessionStatus sessionStatus) {
LoadValidator.validate(load);
if(result.hasErrors()){
//do something
return something;
}else {
loadService.saveLoad(load);
return "forward:getApplicationRequirements";
}
}
供您参考,请查看上述链接的“7.2使用Spring的Validator接口进行验证”。