Spring尝试为每个模型属性绑定一次表单post参数

时间:2012-06-14 09:16:53

标签: spring-mvc

我有一个控制器,其中包含以下内容:

@ModelAttribute("searchCriteria")
public abstract SearchableCommand searchCriteria();

@ModelAttribute("searchList")
public PaginatedListAdapter searchList() {
    return new PaginatedListAdapter(defaultSortColumn, searchableService);
}

@RequestMapping
public String doSearch(
        @ModelAttribute("searchCriteria") SearchableCommand searchableCommand, 
        Errors errors,
        @RequestParam(value="sort", required=false) String sort, 
        @RequestParam(value="pageSize", required=false) Integer pageSize, 
        @RequestParam(value="dir", required=false) String dir, 
        @RequestParam(value="page", required=false) Integer page, 
        @ModelAttribute("searchList") PaginatedListAdapter searchList) {

    //some logic here
};

在我的JSP中,我有以下用于测试目的:

<form:form id="searchForm" commandName="searchCriteria">
    <form:input path="searchCriteria[0].searchOperand"/>
    <input id="submitButton" type="submit"/>
</form:form>

提交表单时,我会跟踪代码并正确调用searchableCommand.getSearchCriteria[0] .setSearchOperand(...)。但是,一旦完成,我就接受例外:

org.springframework.beans.NullValueInNestedPathException: Invalid property 'searchCriteria[0]' of bean class [com.domain.web.command.PaginatedListAdapter]: Cannot access indexed value of property referenced in indexed property path 'searchCriteria[0]': returned null

这是因为它也试图致电PaginatedListAdapter.getSearchCriteria[0] .setSearchOperand(...)。顺便提一下,这个类也有一个名为getSearchCriteria的方法,但是对于我来说,为什么spring尝试将表单post参数绑定到两个@ModelAttribute参数,当我的表单明确指出时commandName="searchCriteria只有一个@ModelAttribute具有该名称。

0 个答案:

没有答案