将Spring 2.*升级至4.3:用注解替换SimpleFormController
升级Spring 2.x SimpleFormController到4.3注解版本
我来帮你把这段Spring 2.x的Portlet表单控制器代码改成4.3版本的注解形式,完全替代原来的SimpleFormController——这个类在Spring 3之后就被废弃了,注解方式会更灵活清晰。
改写后的完整代码
import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.portlet.bind.annotation.ActionMapping; import org.springframework.web.portlet.bind.annotation.RenderMapping; import org.springframework.web.portlet.bind.annotation.RequestMapping; @Controller @RequestMapping("VIEW") // 对应Portlet的VIEW模式,根据你的实际配置调整 public class SearchController { // 替代原来的setCommandClass和setCommandName @ModelAttribute("aList") public ListWrapper createCommandObject() { return new ListWrapper(); } // 替代原来的setFormView,处理表单展示的渲染请求 @RenderMapping public String showSearchForm() { return "edit-search"; } // 替代原来的表单提交逻辑(对应onSubmit方法),处理表单提交的Action请求 @ActionMapping(params = "action=submitSearch") // 根据你表单的action参数调整,无参数可省略 public String handleSearchSubmit(@ModelAttribute("aList") ListWrapper listWrapper, Model model) { // 这里放原来的表单处理逻辑:比如参数验证、调用业务服务等 // 处理完成后返回成功视图,和原来的setSuccessView一致 return "edit-search"; } }
对应原来代码的细节说明
- 替换继承关系:去掉
extends SimpleFormController,换成@Controller注解标记类,再用@RequestMapping("VIEW")指定Portlet的处理模式(比如VIEW/EDIT等,根据你的Portlet配置来)。 - 表单对象配置:原来的
setCommandClass(ListWrapper.class)和setCommandName("aList"),用@ModelAttribute("aList")注解的方法来实现——这个方法会自动创建表单对象并放入模型,名字就是你指定的"aList",和原来的commandName完全对应。 - 视图配置:
setFormView("edit-search")对应@RenderMapping注解的方法,处理Portlet的渲染请求,返回表单视图。setSuccessView("edit-search")对应@ActionMapping方法的返回值,处理完表单提交后返回成功视图。
- sessionForm设置:原来的
setSessionForm(false)表示表单对象不存到session里,Spring Portlet MVC注解方式默认就是这个行为,所以不需要额外配置。
额外补充
如果需要表单验证,可以在handleSearchSubmit方法的参数里加上@Valid和BindingResult,比如:
public String handleSearchSubmit(@Valid @ModelAttribute("aList") ListWrapper listWrapper, BindingResult result, Model model) { if (result.hasErrors()) { // 验证失败,返回表单视图展示错误 return "edit-search"; } // 验证通过,执行业务逻辑 return "edit-search"; }
内容的提问来源于stack exchange,提问作者user2017748
相关产品推荐
相关产品推荐

