【问题标题】:Jsp page is returning null object to controllerJsp页面正在向控制器返回空对象
【发布时间】:2014-11-26 11:47:53
【问题描述】:

我是 Spring MVC 的新手,我正在尝试创建一个小应用程序,从这个 page 获取一些信息。我有两个按钮:“显示页面信息”按钮,单击它会转到PageController 中的GetPageInfo 方法,以及“保存”按钮,它会获取显示的信息,使用@Validated 注释验证它们,如果它们经过验证后,它调用另一个 jsp 页面 pageSaveSuccess。 这是我的代码:

@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;
    }
}

而jsp页面是:

<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 方法时为空,因为控制台显示此日志:Saving the Page info: null

我的错误是什么? jsp页面中已经显示的页面信息如何返回? 谢谢。

【问题讨论】:

  • System.out.println("Saving the Page info: " + page.getName()); 打印 Saving the Page info: null 并不意味着页面为空,只是 page.getName() 为空!
  • mmm 是的,你是对的,但为什么它不返回页面的属性?我的意思是名字、网站、电话……

标签: java jsp spring-mvc


【解决方案1】:

您需要在输入字段中添加 name 属性,例如

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

您也可以使用表单输入标签

<form:input path="name" />

唯一的问题是 form:input 不支持 value 属性,但是从我在控制器方法中看到的,应该已经在对象上设置了初始值

【讨论】:

  • 添加 name="page" 后仍然面临同样的问题。
  • 如果将name属性添加到标签,添加它们为name="name", name="website", name="about", name="phone"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-08
相关资源
最近更新 更多