2012-06-24 6 views
4

안녕 얘들 아 나는 봄을 배우려고 노력하고 봄 2.5로 작성된 튜토리얼을 따르고 있습니다. 필자의 연구에 따르면 SimpleFormController가 주석 @Controller를 사용하여 감가 상각되었습니다. 이 클래스를 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은 각 요청 후에 "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) { 
    ... 
    } 

} 
1

컨트롤러는 어떤 클래스도 확장 할 필요가 없습니다. 적절하게 주석을 달아주세요.

나는 "Bare Bones Spring"이 좋은 3.0 자습서라고 생각합니다.