【发布时间】:2017-02-18 21:41:09
【问题描述】:
结果.java:
public class Result {
private Float weight;
private Float series;
private Float rep;
private String doneDate;
public Float getWeight() {
return weight;
}
public void setWeight(Float weight) {
this.weight = weight;
}
public Float getSeries() {
return series;
}
public void setSeries(Float series) {
this.series = series;
}
public Float getRep() {
return rep;
}
public void setRep(Float re) {
this.rep = rep;
}
public String getDoneDate() {
return doneDate;
}
public void setDoneDate(String doneDate) {
this.doneDate = doneDate;
}
}
result.jsp(带表单的片段)
<form:form method="POST" modelAttribute="resultForm" class="form-signin" action="/main/result/${object.id}">
<spring:bind path="weight">
<div class="form-group ${status.error ? 'has-error' : ''}" style="display: inline;">
<form:input style="width:30%" type="text" path="weight" class="form-control resultsave"></form:input>
</div>
</spring:bind>/
<spring:bind path="series">
<div class="form-group ${status.error ? 'has-error' : ''}" style="display: inline;">
<form:input style="width:30%" type="text" path="series" class="form-control resultsave" ></form:input>
</div>
</spring:bind>/
<spring:bind path="rep">
<div class="form-group ${status.error ? 'has-error' : ''}" style="display: inline;">
<form:input style="width:30%" type="text" path="rep" class="form-control resultsave" ></form:input>
</div>
</spring:bind>
<br/>
<spring:bind path="doneDate">
<div class="form-group ${status.error ? 'has-error' : ''}" style="display:inline">
<form:input type="text" id="datepicker" path="doneDate" class="form-control resultsave" value="${date}"></form:input>
</div>
</spring:bind>
<br />
<button class="btn btn-lg btn-primary btn-block overlayLink button big alt" type="submit">Zapisz wyniki</button>
</form:form>
POST 方法的控制器
@RequestMapping(value = "/main/result/{id}", method = RequestMethod.POST)
public String save(@ModelAttribute("resultForm") Result result, @PathVariable("id") Long id, BindingResult bindingResult, Model model,Principal principal){
Exercise exercise = exerciseService.findById(id);
if(exercise.getUsername().equals(principal.getName())){
resultValidator.validate(result, bindingResult);
return "redirect:main";
}
else
return "redirect:main";
}
验证器(我都发表了评论,因为我不确定是什么导致了我的问题):
@Component
public class ResultValidator implements Validator{
@Override
public boolean supports(Class<?> aClass) {
return Result.class.equals(aClass);
}
@Override
public void validate(Object o, Errors errors) {
Result result = (Result)o;
/* if (isFloat(""+result.getWeight())) {
errors.rejectValue("weight", "form.weight.numberformat");
}
if (isFloat(""+result.getSeries())) {
errors.rejectValue("series", "form.serie.numberformat");
}
if (isFloat(""+result.getRep())) {
errors.rejectValue("rep", "rep.numberformat");
}*/
}
public Boolean isFloat(String validate){
try{
Float f = Float.parseFloat(validate.toString());
return true;
}catch (NumberFormatException e){
return false;
}
}
}
但是每次我提交表单时我都会收到错误的请求,谁能指出我做错了什么?
13:46:55,838 警告 [org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver] (默认任务 62)绑定请求元素失败: org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: 无法将类型 [java.lang.String] 的值转换为所需类型 [java.lang.Long];嵌套异常是 java.lang.NumberFormatException: 对于输入字符串:“main”
【问题讨论】:
-
根据堆栈跟踪,它尝试将
String转换为Long并且您在此代码 sn-p 中拥有的唯一Long是id,您应该确保PathVariableid正确提供,在生成的 HTML 代码中检查/main/result/${object.id}的结果。
标签: java spring spring-mvc