You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:33:45