我开始学习spring MVC3,我想在这里显示一个简单的“搜索表单”我的jsp文件
<form:form method="post" action="addGeo.html" >
<table>
<tr>
<td>
<input type="submit" value="<spring:message code="label.addzone"/>"/>
</td>
</tr>
</table>
</form:form>
<form:form method="post" action="maingeo.html" >
<table>
<tr>
<td>
<form:label path="codeZone"><spring:message code="label.area"/></form:label>
</td>
<td>
<form:input path="codeZone" />
</td>
<td>
<form:label path="type"><spring:message code="label.type"/></form:label>
</td>
<td>
<form:input path="type" />
</td>
<td>
<form:label path="codePostal"><spring:message code="label.departement"/></form:label>
</td>
<td>
<form:input path="codePostal" />
</td>
<td>
<input type="submit" value="<spring:message code="label.searchArea"/>"/>
</td>
</tr>
</table>
</form:form>
在这里我的控制器:
@Controller
public class RefGeoController {
@Autowired
private RefGeoService refgeoService;
@RequestMapping("/maingeo")
public String goSearchArea() {
return "maingeo";
}
}
当我转到这个url页面时,我遇到了这个异常:java.lang.IllegalStateException:BindingResult和bean名称'command'的普通目标对象都不可用作请求属性。我想我忘记了我的形式或者可能在我的控制器中,但我不知道在哪里。此外,当我不想将特定模型发送到我的jsp视图时,我应该在我的方法参数上放什么?
答案 0 :(得分:1)
您需要编写一个包含表单字段的类 - 这种类称为Command-Object / Class。
然后在您负责提供表单页面的Controller方法中,您需要创建此Command-Object的实例,将其放入Model中,然后让视图呈现它。模型中用于Command-Object的名称必须与<form:form command="myCommand">
标记的“command”属性名称匹配。如果您没有此属性,则默认名称为command
。
@Controller public class RefGeoController {
@Autowired private RefGeoService refgeoService;
@RequestMapping("/maingeo")
public ModelAndView goSearchArea() {
return new ModelAndView("maingeo", "searchCommand", new SearchCommand());
}
//only to prevent your next question: How to recive the committed form
@RequestMapping("/maingeo.html", method = RequestMethod.POST)
public ModelAndView handleSearch(SearchCommand searchCommand) {
... implement the search stuff
}
}
<form:form method="post" action="maingeo.html" command="searchCommand">