[英]Spring-mvc error: Neither BindingResult nor plain target object for bean name 'userBean' available as request attribute
[英]Neither BindingResult nor plain target object for bean name 'student' available as request attribute - Spring MVC
首先,我想說的是,我在SO(及其他地方)上閱讀了有關此錯誤的許多問題和答案,但對這種特定情況沒有幫助。
我簡單的Spring MVC Web應用程序的場景是這樣的:用戶基於String屬性indexNumber搜索一個學生(searchStudent.jsp)。 indexNumber由用戶輸入的其他3個屬性組成:programId,rollNumber,rollYear。 例如,如果programId =“ M5”,rollNumber =“ 10”和rollYear =“ 2013”,則indexNumber將為“ M5 10/13”。 這是在視圖中完成的。 indexNumber是每個學生的唯一標識符,但不是PK。 重要說明:搜索學生並加載適當的頁面本身就可以正常工作。
如果不存在學生,則假設addAfterSearchStudent.jsp頁面將加載用戶在searchStudent.jsp中輸入的預填充值(programId,rollNumber,indexNumber)-我不想讓用戶兩次輸入此數據。 我寫了下面的代碼,我認為它可以完全按照我在這里描述的進行操作,但是卻遇到了上述錯誤。 當我對這些屬性進行硬編碼並嘗試保存數據時,這也可以正常工作。 我相信問題在於將參數從一個jsp傳遞到另一個。
這些是我控制器的處理程序方法:
/**
* Handles and retrieves the search student page
*/
@RequestMapping(value="/search", method = RequestMethod.GET)
public String getSearchStudent(Model model) {
logger.debug("Received request to show search student page");
model.addAttribute("index", new Student());
model.addAttribute("programList", programService.getAll());
return "searchStudent";
}
/**
* Searches for a student by delegating the processing to StudentService.
*/
@RequestMapping(value="/search", method = RequestMethod.POST)
public String postSearchStudent(@RequestParam(value = "program.programId") String programId,
@RequestParam(value = "rollNumber") String rollNumber,
@RequestParam(value = "rollYear") String rollYear,
@RequestParam(value = "indexNumber") String indexNumber,
Model model) {
logger.debug("Received request to search for a student");
model.addAttribute("program.programId", programId);
model.addAttribute("rollNumber", rollNumber);
model.addAttribute("rollYear", rollYear);
model.addAttribute("indexNumber", indexNumber);
// Call StudentService to do the actual searching
Student student = studentService.search(indexNumber);
// if student isn't in the db load addAfterSearchStudent.jsp, else load student.jsp
if (student == null)
return "addAfterSearchStudent";
else
return "student";
}
/**
* Handles and retrieves the add (after search) student page
*/
@RequestMapping(value="/addSearch", method = RequestMethod.GET)
public String getAddSearchStudent(@RequestParam(value = "program.programId") String programId,
@RequestParam(value = "rollNumber") String rollNumber,
@RequestParam(value = "rollYear") String rollYear,
@RequestParam(value = "indexNumber") String indexNumber,
Model model) {
logger.debug("Received request to show add (after search) student page");
Student student = new Student();
student.setRollNumber(rollNumber);
student.setRollYear(rollYear);
student.setIndexNumber(indexNumber);
Program program = programService.get(programId);
student.setProgram(program);
model.addAttribute("student", student);
return "addAfterSearchStudent";
}
/**
* Adds a new student after search by delegating the processing to StudentService.
* Displays a confirmation JSP page
*/
@RequestMapping(value="/addSearch", method = RequestMethod.POST)
public String postAddSearchStudent(@ModelAttribute("student") Student student) {
logger.debug("Received request to add new student after search");
// Call StudentService to do the actual adding
studentService.addAfterSearch(student);
// resolves to /WEB-INF/jsp/success/addStudentSuccess.jsp
return "/success/addStudentSuccess";
}
這是searchStudent.jsp:
<c:url var="searchUrl" value="/essays/main/student/search" />
<form:form modelAttribute="index" method="POST" action="${searchUrl}">
...
這是addAfterSearchStudent.jsp:
<c:url var="saveUrl" value="/essays/main/student/addSearch" />
<form:form commandName="student" method="POST" action="${saveUrl}">
...
我知道這很長,但是我想提供所有相關信息。 有人知道我在哪里犯錯嗎?
<form:form commandName="student" ...>
您的addAfterSearchStudent.jsp
需要一個名為“ student”的對象。 在您的postSearchStudent()
方法中,您不會在模型中添加一個。
if (student == null)
return "addAfterSearchStudent";
您需要創建一個Student
對象並添加它,就像在getAddSearchStudent()
方法中一樣。
Student student = new Student();
student.setRollNumber(rollNumber);
student.setRollYear(rollYear);
student.setIndexNumber(indexNumber);
Program program = programService.get(programId);
student.setProgram(program);
model.addAttribute("student", student);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.