我是Spring MVC的新手,我正在尝试创建一个小应用程序,从这个page获取一些信息。我有两个按钮:“显示页面信息”按钮,点击它转到GetPageInfo
中的PageController
方法,然后“保存”按钮显示信息,使用{{1}验证它们注释,如果它们被验证,它会调用另一个jsp页面,即pageSaveSuccess。
这是我的代码:
@Validated
jsp页面是:
@Controller
public class PageController {
@Autowired
private PageService pageService;
@Autowired
@Qualifier("pageValidator")
private Validator validator;
@InitBinder
private void initBinder(WebDataBinder binder) {
binder.setValidator(validator);
}
@RequestMapping("/")
public ModelAndView showPage(){
Map<String, Object> model = new HashMap<String, Object>();
return new ModelAndView("page", model);
}
@RequestMapping(value= "/getPage", method = RequestMethod.GET)
public ModelAndView GetPageInfo(@ModelAttribute("page") PageVO pageVO, ModelMap model) {
Page page = pageService.GetPageInfo();
pageVO = convertToVO(page);
System.out.println("Page name Service: " + pageVO.getName());
model.addAttribute("page", pageVO);
return new ModelAndView("page", model);
}
@RequestMapping(value = "/savePage", method = RequestMethod.POST)
public String savePage(@ModelAttribute("page") @Validated PageVO page, BindingResult bindingResult, Model model) {
System.out.println("Saving the Page info: " + page.getName());
if (bindingResult.hasErrors()) {
System.out.println("Returning page.jsp page");
return "page";
}
System.out.println("Returning pageSaveSuccess.jsp page");
model.addAttribute("page", page);
return "pageSaveSuccess";
}
public PageVO convertToVO(Page page) {
PageVO pVO = new PageVO();
pVO.setName(page.getName());
pVO.setAbout(page.getAbout());
pVO.setPhone(page.getPhone());
pVO.setWebsite(page.getWebsite());
return pVO;
}
}
问题在于,当我点击“显示页面信息”时,信息会在文本框中很好地显示,但是当我点击“保存”时,页面对象在到达<form:form action="savePage" commandName="page" method="POST">
<input type="button" onclick="location.href='${pageContext.request.contextPath}/getPage'" value="Display Page Info" >
<ul>
<li>
<label style="width: 75px">Name</label><input type="text" value="${page.name}" style="margin: 8px 100px 5px 100px; width: 200px;" />
</li>
<li>
<label style="width: 75px">About</label> <input type="text" value="${page.about}" style="margin: 8px 100px 5px 100px; width: 400px;" />
</li>
<li>
<label style="width: 75px">Website</label> <input type="text" value="${page.website}" style="margin: 8px 100px 5px 100px; width: 200px;" />
</li>
<li>
<label style="width: 75px">Phone</label> <input type="text" value="${page.phone}" style="margin: 8px 100px 5px 100px; width: 200px;" />
</li>
</ul>
<input type="submit" value="Save"/>
</form:form>
方法时为空,因为控制台显示此日志:savePage
。
我的错误是什么?如何返回已在jsp页面中显示的页面信息? 感谢。
答案 0 :(得分:1)
您需要将 name 属性添加到输入字段,例如
<input type="text" value="${page.name}" name="name" style="margin: 8px 100px 5px 100px; width: 200px;" />
作为替代方案,您可以使用表单输入标记
<form:input path="name" />
唯一的一点是表单:输入不支持 value 属性,但是从我看到的控制器方法中,初始值应该已经设置在对象上