java – 如何以spring形式绑定子类对象提交为modelAttribute

我有

Class Shape {
      //Implementation
}
Class Round extends Shape{
      //Implementation
}

调节器
我有

@Requestmapping(value="/view/form")
public ModelAndView getForm(){
ModelAndView mav=new ModelAndView();
mav.addObject("shape",new Round());
}


@RequestMapping(value="/submit",method = RequestMethod.POST)    
public ModelAndView submitForm(@ModelAttribute("shape") Shape shape){
         if(shape instanceof Round){ //**Not giving positive result**

         }
    }

在Jsp

当我用Round对象提交表单时.在控制器端,ModelAttribute没有给出Round的实例.它只给出形状的例子.这该怎么做

最佳答案
你不能做这个.因为这是两个不同的请求生命周期.

@Requestmapping(value="/view/form")
public ModelAndView getForm(){
ModelAndView mav=new ModelAndView();
mav.addObject("shape",new Round());
}

当执行上述请求时,即使您在mav中添加了Round对象,它也已转换为html响应并发送回客户端.

因此,当您提交表单时接下来请求时,它是一个完全独立的请求,并且spring无法识别为先前的请求添加了哪个对象类型.

@RequestMapping(value="/submit",method = RequestMethod.POST)    
public ModelAndView submitForm(@ModelAttribute("shape") Shape shape){
         if(shape instanceof Round){ //**Not giving positive result**

         }
    }

但是你可以尝试探索@SessionAttributes,使用它可以在不同的请求中维护相同的对象

相关文章

这篇文章主要介绍了spring的事务传播属性REQUIRED_NESTED的原...
今天小编给大家分享的是一文解析spring中事务的传播机制,相...
这篇文章主要介绍了SpringCloudAlibaba和SpringCloud有什么区...
本篇文章和大家了解一下SpringCloud整合XXL-Job的几个步骤。...
本篇文章和大家了解一下Spring延迟初始化会遇到什么问题。有...
这篇文章主要介绍了怎么使用Spring提供的不同缓存注解实现缓...