2012-06-24 100 views
4

嘿家伙我想学习Spring并且我正在学习Spring 2.5写的教程。我的研究已经表明,SimpleFormController已经被折旧了,以支持注解@Controller。我试图将这个类转换为控制器类,有人可以告诉我这是如何完成的,下面是我的类。我不确定课堂中的方法,但是这些方法是否也会改变,或者我是否只为课堂添加注释?从春天2.5 MVC到春天3.0 MVC

package springapp.web; 


import org.springframework.web.servlet.mvc.SimpleFormController; 
import org.springframework.web.servlet.ModelAndView; 
import org.springframework.web.servlet.view.RedirectView; 

import javax.servlet.ServletException; 
import javax.servlet.http.HttpServletRequest; 

import org.apache.commons.logging.Log; 
import org.apache.commons.logging.LogFactory; 

import springapp.service.ProductManager; 
import springapp.service.PriceIncrease; 

public class PriceIncreaseFormController extends SimpleFormController { 

    /** Logger for this class and subclasses */ 
    protected final Log logger = LogFactory.getLog(getClass()); 

    private ProductManager productManager; 

    public ModelAndView onSubmit(Object command) 
      throws ServletException { 

     int increase = ((PriceIncrease) command).getPercentage(); 

     logger.info("Increasing prices by " + increase + "%."); 

     productManager.increasePrice(increase); 


     logger.info("returning from PriceIncreaseForm view to " + getSuccessView()); 

     return new ModelAndView(new RedirectView(getSuccessView())); 
    } 

    protected Object formBackingObject(HttpServletRequest request) throws ServletException { 
     PriceIncrease priceIncrease = new PriceIncrease(); 
     priceIncrease.setPercentage(20); 
     return priceIncrease; 

    } 

    public void setProductManager(ProductManager productManager) { 
     this.productManager = productManager; 
    } 

    public ProductManager getProductManager() { 
     return productManager; 
    } 



} 

回答

2

通过注释“createPriceIncrease”方法@ModelAttribute,您告诉春天如何初始填充“priceIncrease”模型值。

@SessionAttributes告诉Spring在每次请求后自动将“priceIncrease”对象存储在会话中。

最后,关于“post”和“get”方法的方法参数的@ModelAttribute告诉spring找到一个名为“priceIncrease”的模型属性。
它会知道它是一个会话属性,如果它可以找到它,否则它会使用“createPriceIncrease”方法创建它。

@Controller 
@SessionAttributes({"priceIncrease"}) 
@RequestMapping("/priceIncrease") 
public class MyController { 

    @ModelAttribute("priceIncrease") 
    public PriceIncrease createPriceIncrease() { 
     PriceIncrease priceIncrease = new PriceIncrease(); 
     priceIncrease.setPercentage(20); 
     return priceIncrease; 
    } 

    @RequestMapping(method={RequestMethod.POST}) 
    public ModelAndView post(@ModelAttribute("priceIncrease") PriceIncrease priceIncrease, 
     HttpServletRequest request, 
     HttpServletResponse response) { 
    ... 
    } 

    @RequestMapping(method={RequestMethod.GET}) 
    public ModelAndView get(@ModelAttribute("priceIncrease") PriceIncrease priceIncrease, 
     HttpServletRequest request, 
     HttpServletResponse response) { 
    ... 
    } 

}