我有一个控制器,其中包含以下内容:
@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
具有该名称。