这是我的控制器
@Controller
@RequestMapping("VIEW")
public class SearchController {
private static final Log LOGGER = LogFactoryUtil.getLog(SearchController.class);
@RenderMapping
public String render() {
return "view";
}
@ActionMapping(params = "action = getResults")
public void getResults(@ModelAttribute("search") Search search, ActionRequest actionRequest, ActionResponse actionResponse) {
String keyword = search.getKeyword();
LOGGER.info("Keyword: " + keyword);
}
}
还有我的豆子,
public class Search {
private String keyword;
public String getKeyword() {
return keyword;
}
public void setKeyword(String keyword) {
this.keyword = keyword;
}
}
和我的观点.jsp
<%@page import="org.springframework.web.bind.annotation.RequestMethod"%>
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<portlet:defineObjects />
<portlet:actionURL var = "getResultsURL">
<portlet:param name="action" value="getResults"/>
</portlet:actionURL>
<form:form action="${getResultsURL}" commandName="search" method="POST">
<form:input path="keyword"/>
<input type="submit" value="Search">
</form:form>
并且我收到以下异常
java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'search' available as request attribute
如果我将@ModelAttribute("搜索")作为渲染方法中的参数,它工作正常,但我知道这是绝对错误的(纠正我)
有什么建议吗?
呈现 JSP 页面时会出现此异常,对吗?
Spring MVC告诉你,它在当前请求中找不到"search"属性。事实上,你的控制器不会将搜索类的任何实例放到Spring MVC模型中。
两个选项:
-
使用@ModelAttribute注释为搜索类实例创建 getter:
@ModelAttributepublic Search getSearch() { 返回新的搜索();}
-
在渲染方法中将搜索类实例放入 Spring 模型:
@RenderMapping公共字符串渲染(模型模型) { model.addAttribute("search", new Search()); 返回"视图";}
这样,表单标记将在给定的命令名称下找到模型。