我是Spring MVC (3.1.1)
的新手。来自Rails和Struts1世界。
在Struts中,我们的FormBeans
会自动映射到我们的控制器。例如:
# JS file
ExtJS.ajax({action:'update', value:42});
然后我们的控制器可以:
bean.getAction(); // 'update'
bean.getValue(); // 42
我们将bean实例化为:
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
MyBean bean = (MyBean) form;
....
}
请原谅我的无知,但我如何在Spring MVC中做同样的事情?
答案 0 :(得分:1)
在jsp中做这样的事情:
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<form:form name="frmFoo" id="frmFoo" action="/FormSubmitUrl" method="POST" modelAttribute="foo">
<form:select path="myField">
<form:errors path="myField" />
</form:form>
只需在控制器方法中将支持对象添加到模型中:
@RequestMapping(value = "/MyFooForm", method = RequestMethod.GET)
public String getFoo(final Model model)
{
model.addAttribute("foo", foo);
return "fooForm.jsp";
}
答案 1 :(得分:0)
来自Spring MVC - Rails。我更喜欢Rails :-)。 Spring MVC有很多启动教程。但是春天有一个很好的教程,你可以遵循。但首先,您必须从spring-dispatch-servlet.xml开始。在那里,您将定义视图,控制器和表单之间的关联。例如,在以下代码段中:
<bean name="/priceincrease.htm" class="springapp.web.PriceIncreaseFormController">
<property name="sessionForm" value="true"/>
<property name="commandName" value="priceIncrease"/>
<property name="commandClass" value="springapp.service.PriceIncrease"/>
<property name="validator">
<bean class="springapp.service.PriceIncreaseValidator"/>
</property>
<property name="formView" value="priceincrease"/>
<property name="successView" value="hello.htm"/>
<property name="productManager" ref="productManager"/>
</bean
Controller是PriceIncreaseFormController,priceIncrease是等效的命令对象。相应的视图即JSP将具有
<form:form method="post" commandName="priceIncrease">
<table width="95%" bgcolor="f8f8ff" border="0" cellspacing="0" cellpadding="5">
<tr>
<td align="right" width="20%">Increase (%):</td>
<td width="20%">
<form:input path="percentage"/>
</td>
<td width="60%">
<form:errors path="percentage" cssClass="error"/>
</td>
</tr>
</table>
但我想你可以从这个我从中获取代码的地方得到完整的图片 http://static.springsource.org/docs/Spring-MVC-step-by-step/part4.html#step4.5以及可以获得Spring MVC示例代码库的地方是https://src.springframework.org/svn/spring-samples/mvc-basic
答案 2 :(得分:0)
我今天根据我继承的项目中的一些代码寻找这个答案。我发现如果你在multiActionController上创建一个控制器动作。表单值可以映射到bean,它将是处理程序操作的第三个参数。
在我的情况下,我有一个像这样的控制器
public void submit(HttpServletRequest request,
HttpServletResponse response, SomeBean sb) {
{
//do something with sb - SomeBean
}
我的问题在于弄清楚我的表单中的值是如何映射到控制器操作的。在我的jsp表单中根本没有对SomeBean的引用。事实证明,Spring基于控制器动作参数和表单中使用的名称来实现魔力。它基本上将表单中的值映射到bean,该bean用作action方法中的第三个参数。
例如,我的SomeBean有一些名为byday和bymonth的字段。它还有相应的byday和bymonth setter和getter(即getBymonth(),setBymonth)。在我的提交操作中,映射到提交,我有按日和按月的输入值,如下所示:
<select id="weekly_option" name="byday">
<option value="MON">Monday</option>
<option value="TUE">Tuesday</option>
<option value="WED">Wednesday</option>
<option value="THU">Thursday</option>
<option value="FRI">Friday</option>
<option value="SAT">Saturday</option>
<option value="SUN">Sunday</option>
</select>
我不得不深入研究映射的确切方式。我偷看了MultiActionController源代码,看看是否有以下内容:
此时似乎它只适用于字符串属性。我想如果你想在bean中使用字符串以外的属性,你必须以某种方式扩展MVC。