#java #spring #spring-mvc
#java #весна #spring-mvc
Вопрос:
Result.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;
}
}
результат.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.Методаргументтипемисматчисключение: не удалось преобразовать значение типа [java.lang.Строка] к требуемому типу [java.lang.Long]; вложенным исключением является исключение java.lang.NumberFormatException: для входной строки: «main»
Комментарии:
1.Согласно трассировке стека, он пытается преобразовать a
String
в aLong
, и единственноеLong
, что у вас есть в этом фрагменте кода, — это theid
, вы должны убедиться, чтоPathVariable
id
он правильно предоставлен, как вы ожидаете, проверьте результат/main/result/${object.id}
в сгенерированном HTML-коде.
Ответ №1:
Передаваемое значение id должно быть числом (длинным), но при нажатии кнопки () вы передаете строковое значение /main/result/${object.id}
, которое нельзя преобразовать в число. Пожалуйста, поделитесь полной страницей jsp.