#spring #eclipse #spring-mvc
#spring #eclipse #spring-mvc
Вопрос:
Я перепробовал все решения, но я продолжаю получать эту ошибку. Более того, если я не использую form:form в файле jsp и использую простой HTML, я получаю желаемый результат.
Класс контроллера
@Controller
public class controller_class {
/*
* @RequestMapping(path = "/index", method = RequestMethod.GET) public
* ModelAndView mar() { return new ModelAndView("index","command",new marks());
* }
*/
@RequestMapping("/index")
public ModelAndView showComments() {
return new ModelAndView("marks","command",new marks());
}
@RequestMapping(value = "/addMarks", method = RequestMethod.POST)
public ModelAndView stud(@ModelAttribute("marks") marks m) {
ModelAndView mv = new ModelAndView("result");
int k = m.calculate();
mv.addObject("tot_marks", k);
return mv;
}
}
index.jsp
<form:form method = "POST" modelAttribute="marks" action = "/springmvc_qa3/addMarks">
<table>
<tr>
<td><form:label path = "sci_marks">Name</form:label></td>
<td><form:input path = "sci_marks" /></td>
</tr>
<tr>
<td><form:label path = "maths_marks">Age</form:label></td>
<td><form:input path = "maths_marks" /></td>
</tr>
<tr>
<td><form:label path = "eng_marks">id</form:label></td>
<td><form:input path = "eng_marks" /></td>
</tr>
<tr>
<td colspan = "2">
<input type = "submit" value = "Submit"/>
</td>
</tr>
</table>
</form:form>
</body>
Правильный вывод, если я использую это вместо
<form method="POST" action="/springmvc_qa3/addMarks" >
<table>
<tr>
<td><label >Science Marks</label></td>
<td><input type="text" name="sci_marks" /></td>
</tr>
<tr>
<td><label >Mathematics Marks</label></td>
<td><input type="text" name="maths_marks" /></td>
</tr>
<tr>
<td><label >English Marks</label></td>
<td><input type="text" name="eng_marks" /></td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="Submit" />
</td>
</tr>
</table>
</form>
В чем причина, по которой я не могу получить правильный вывод, используя первый метод?
Комментарии:
1. В вашем контроллере индекса вы передаете объект ‘new marks()’ под именем ‘command’. Но в форме, которую вы используете, объект с именем marks. Кстати, пожалуйста, называйте свои классы заглавной первой буквой, как в общедоступном классе Marks {}, а затем объявляйте переменные с помощью знаков m.
2. Итак, какие изменения я должен включить в код? И да, вы правы. Я позабочусь о том, чтобы называть классы с заглавной первой буквы.
Ответ №1:
добавьте следующее в свой класс контроллера:
@ModelAttribute("marks")
public Marks nameOfMethodDoesntMatter(){
return new Marks();
}
убедитесь, что в вашем классе Marks есть методы получения, установки и конструктор по умолчанию.
рассмотрите возможность вызова вашего класса MarksDTO или чего-то подобного, чтобы лучше передать его значение (DTO = объект передачи данных).