使用SimpleFormController,但发现必须要设置formView属性,能不设置这个属性吗??1、发现在地址栏输入/xxxx.do不会直接进Controller中,而是先跑到formView设置的页面里,需要POST提交后才进 Controller,然后再返回到successView中,可开发过程中,successView和formView往往是一样的,这不是多余么~~2、有些时候输入/xxxx.do后需要先进Controller取一些数据然后返回到successView中,这一点是经常用到的,如果Spring必须要POST提交才能进Controller,那也太不合理了吧~~所以想如何能以GET方式进入Controller,这样即可以不设置formView属性,也可以实现第2条的需要,目前知道重写isFormSubmission()和使用referenceData(...)方法,但想求一个最佳实践,还请各位指点一下,谢谢了~~

解决方案 »

  1.   

    使用referenceData就可以。spring 最新版已经不这么写了。直接用注释了,像这样。
    @Controller
    @RequestMapping("/addOwner.do")
    @SessionAttributes(types = Owner.class)
    public class AddOwnerForm { private final Clinic clinic; @Autowired
    public AddOwnerForm(Clinic clinic) {
    this.clinic = clinic;
    }    @InitBinder
        public void setAllowedFields(WebDataBinder dataBinder) {
            dataBinder.setDisallowedFields(new String[] {"id"});
        }    @RequestMapping(method = RequestMethod.GET)
    public String setupForm(Model model) {
    Owner owner = new Owner();
    model.addAttribute(owner);
    return "ownerForm";
    } @RequestMapping(method = RequestMethod.POST)
    public String processSubmit(@ModelAttribute Owner owner, BindingResult result, SessionStatus status) {
    new OwnerValidator().validate(owner, result);
    if (result.hasErrors()) {
    return "ownerForm";
    }
    else {
    this.clinic.storeOwner(owner);
    status.setComplete();
    return "redirect:owner.do?ownerId=" + owner.getId();
    }
    }}
    你可以看看最新版的spring里的petclinic例子。
      

  2.   

    formview是非必须的,commandclass是必须的好像。
    1你可以不配置这两项内容,并且你即使配置了的话,转到哪个页面还是由你控制的
    2当第一次输入/xxx。do的时候,进入controller的操作你完全可以实现formBackingObject(HttpServletRequest request)这个方法来处理一些东西,例如向request里放入一些你要用到的对象实例等等如我要添加一个职员,则先需要获得到本公司的部门信息,这样初始化好部门信息,才能将职员添加到某个部门里边去你所说的以get方式进入controller,目前我没有实现,但是formview是可以不设置的。。
      

  3.   

    不过如果你不想要用simpleformcontroller的话,那你就不要继承他就可以了啊,用AbstractController来继承就可以了啊?
      

  4.   

    回2楼:
    不喜欢用注解,呵呵,个人习惯吧~~
    用referenceData的话,即要写用referenceData(),还要写onSubmit(),我就是想把GET和POST合在一起
      

  5.   

    回3楼:
    使用SimpleFormController,formView是必须要设置的啊,要不就提示找不到页面,你是怎么做才可以不用设置呢?用SimpleFormController是为了command,表单数据绑定啊,AbstractController没有吧?你的程序里没有GET进Controller的需求?