Spring MVC 既不是 BindingResult 也不是使用 ModelAndView 和 Form 标签的 bean 名称的普通目标对象
Spring MVC Neither BindingResult nor plain target object for bean name using ModelAndView and Form tag
虽然我在这里阅读了一些问题和答案,但我似乎无法解决这个问题。我正在使用 spring mvc 并尝试制作会员信息编辑表单。
这是错误信息。
Neither BindingResult nor plain target object for bean name 'id' available as request attribute
我正在使用 Member.vo 并且它已经具有为此所需的所有 getter 和 setter。
这是控制器。第一个是获取会员信息
@RequestMapping(value = "/setting", method = RequestMethod.GET)
public String setting(HttpSession httpSession){
String s_id = (String) httpSession.getAttribute("s_id");
ModelAndView mav = new ModelAndView("memberedit");
if(s_id !=null){
Member member = membermapper.memberEdit(s_id);
mav.addObject("command", member); }
return "setting"; }
这个正在上传会员的新信息
@RequestMapping(value = "/membereditadd", method = RequestMethod.POST)
public String memberEdit(Model model, HttpSession httpSession){
Member member = new Member();
membermapper.editForm(member);
String s_url = (String) httpSession.getAttribute("s_url");
model.addAttribute("command", new Member());
return "redirect:"+s_url;
}
这是setting.jsp
<form action="membereditadd" commandName="command" method="post" name="form">
<label for="id">id</label>
<form:input class="form-styling" type="text" path="id" />
<label for="pw">password</label>
<form:input class="form-styling" type="text" path="pw"/>
<label for="email">e-mail</label>
<form:input class="form-styling" type="text" path="email"/>
<input type="submit" class="btn-signin" value="submit">
</form>
这里有各种各样的问题。例如,您在 GET 处理程序中创建了一个 ModelAndView,然后 return 一个纯字符串。您需要 return ModelAndView。
我已经整理了一下。以下期望您的 JSP 被命名为 editMember.jsp
获取处理程序:
/**
* Spring MVC Controller. Loads an existing Member, sets it in the Model
* and forwards to the edit member page.
*
*/
@RequestMapping(value = "/editMember", method = RequestMethod.GET)
public ModelAndView loadEditMemberForm(HttpSession httpSession){
String s_id = (String) httpSession.getAttribute("s_id");
ModelAndView mav = new ModelAndView("editMember");
if(s_id != null){
Member member = membermapper.memberEdit(s_id);
mav.addObject("member", member);
}
return mav;
}
POST 处理程序:
/**
* Spring MVC Controller. Handles form submit. Framework will automatically
* bind for fields with path X to Member fields named X assuming corressponding
* setter setX() is present.
*
*/
@RequestMapping(value = "/editMember", method = RequestMethod.POST)
public String editMember(ModelAttribte("member") member, HttpSession httpSession, RedirectAttributes ra){
Member member = new Member();
membermapper.editForm(member);
String s_url = (String) httpSession.getAttribute("s_url");
//if you are using a redirect
//then you need to use RedirectAttributes
//this makes the Member available to next view
ra.addFlashAttribute("member", member);
return "redirect:"+s_url;
}
更新表格。使用 'modelAttribute' 而不是 'command'.
<form:form modelAttribute="member" method="post">
<label for="id">id</label>
<form:input class="form-styling" type="text" path="id" />
<label for="pw">password</label>
<form:input class="form-styling" type="text" path="pw"/>
<label for="email">e-mail</label>
<form:input class="form-styling" type="text" path="email"/>
<input type="submit" class="btn-signin" value="submit">
</form:form>
虽然我在这里阅读了一些问题和答案,但我似乎无法解决这个问题。我正在使用 spring mvc 并尝试制作会员信息编辑表单。
这是错误信息。
Neither BindingResult nor plain target object for bean name 'id' available as request attribute
我正在使用 Member.vo 并且它已经具有为此所需的所有 getter 和 setter。
这是控制器。第一个是获取会员信息
@RequestMapping(value = "/setting", method = RequestMethod.GET)
public String setting(HttpSession httpSession){
String s_id = (String) httpSession.getAttribute("s_id");
ModelAndView mav = new ModelAndView("memberedit");
if(s_id !=null){
Member member = membermapper.memberEdit(s_id);
mav.addObject("command", member); }
return "setting"; }
这个正在上传会员的新信息
@RequestMapping(value = "/membereditadd", method = RequestMethod.POST)
public String memberEdit(Model model, HttpSession httpSession){
Member member = new Member();
membermapper.editForm(member);
String s_url = (String) httpSession.getAttribute("s_url");
model.addAttribute("command", new Member());
return "redirect:"+s_url;
}
这是setting.jsp
<form action="membereditadd" commandName="command" method="post" name="form">
<label for="id">id</label>
<form:input class="form-styling" type="text" path="id" />
<label for="pw">password</label>
<form:input class="form-styling" type="text" path="pw"/>
<label for="email">e-mail</label>
<form:input class="form-styling" type="text" path="email"/>
<input type="submit" class="btn-signin" value="submit">
</form>
这里有各种各样的问题。例如,您在 GET 处理程序中创建了一个 ModelAndView,然后 return 一个纯字符串。您需要 return ModelAndView。
我已经整理了一下。以下期望您的 JSP 被命名为 editMember.jsp
获取处理程序:
/**
* Spring MVC Controller. Loads an existing Member, sets it in the Model
* and forwards to the edit member page.
*
*/
@RequestMapping(value = "/editMember", method = RequestMethod.GET)
public ModelAndView loadEditMemberForm(HttpSession httpSession){
String s_id = (String) httpSession.getAttribute("s_id");
ModelAndView mav = new ModelAndView("editMember");
if(s_id != null){
Member member = membermapper.memberEdit(s_id);
mav.addObject("member", member);
}
return mav;
}
POST 处理程序:
/**
* Spring MVC Controller. Handles form submit. Framework will automatically
* bind for fields with path X to Member fields named X assuming corressponding
* setter setX() is present.
*
*/
@RequestMapping(value = "/editMember", method = RequestMethod.POST)
public String editMember(ModelAttribte("member") member, HttpSession httpSession, RedirectAttributes ra){
Member member = new Member();
membermapper.editForm(member);
String s_url = (String) httpSession.getAttribute("s_url");
//if you are using a redirect
//then you need to use RedirectAttributes
//this makes the Member available to next view
ra.addFlashAttribute("member", member);
return "redirect:"+s_url;
}
更新表格。使用 'modelAttribute' 而不是 'command'.
<form:form modelAttribute="member" method="post">
<label for="id">id</label>
<form:input class="form-styling" type="text" path="id" />
<label for="pw">password</label>
<form:input class="form-styling" type="text" path="pw"/>
<label for="email">e-mail</label>
<form:input class="form-styling" type="text" path="email"/>
<input type="submit" class="btn-signin" value="submit">
</form:form>