Jsp页面将null对象返回给控制器

时间:2014-11-26 11:47:53

标签: java jsp spring-mvc

我是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页面中显示的页面信息? 感谢。

1 个答案:

答案 0 :(得分:1)

您需要将 name 属性添加到输入字段,例如

<input type="text" value="${page.name}" name="name" style="margin: 8px 100px 5px 100px; width: 200px;" /> 

作为替代方案,您可以使用表单输入标记

<form:input path="name" />

唯一的一点是表单:输入不支持 value 属性,但是从我看到的控制器方法中,初始值应该已经设置在对象上