2009-04-29 12 views
4

Ich möchte diese SimpleFormController konvertieren die Anmerkung Unterstützung in Spring MVC 2.5Anmerkungen in Spring MVC

Java

public class PriceIncreaseFormController extends SimpleFormController { 

    ProductManager productManager = new ProductManager(); 

    @Override 
    public ModelAndView onSubmit(Object command) 
      throws ServletException { 

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

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

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

} 

Frühling Config

<!-- Include basic annotation support --> 
<context:annotation-config/>   

<!-- Comma-separated list of packages to search for annotated controllers. Append '.*' to search all sub-packages --> 
<context:component-scan base-package="springapp.web"/> 

<!-- Enables use of annotations on controller methods to map URLs to methods and request params to method arguments --> 
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/> 

<bean name="/priceincrease.htm" class="springapp.web.PriceIncreaseFormController"> 
    <property name="sessionForm" value="true"/> 
    <property name="commandName" value="priceIncrease"/> 
    <property name="commandClass" value="springapp.service.PriceIncrease"/> 
    <property name="validator"> 
     <bean class="springapp.service.PriceIncreaseValidator"/> 
    </property> 
    <property name="formView" value="priceincrease"/> 
    <property name="successView" value="hello.htm"/> 
    <property name="productManager" ref="productManager"/> 
</bean> 

eingeführt zu verwenden Grundsätzlich möchte ich die gesamte XML-Konfiguration für dieersetzenBean mit Annotationen innerhalb der Java-Klasse. Ist das möglich, und wenn ja, mit welchen entsprechenden Anmerkungen soll ich anfangen?

Danke, Don

+0

Und Ihre Frage ist ...? –

Antwort

6

Es wird so etwas wie folgt aussehen, obwohl ob es genau funktioniert oder nicht, wie ein wenig von Ihrer Konfiguration abhängen ist (Ansicht Resolver, etc). Ich sollte auch beachten, dass es etwa acht Milliarden gültige Möglichkeiten gibt, dieses Ding zu schreiben. Eine Übersicht über den Wahnsinn finden Sie in der Frühjahrsdokumentation, 13.11.4 "Supported handler method arguments and return types". Beachten Sie auch, dass Sie den Validator

@Controller 
@RequestMapping("/priceincrease.htm") 
public class PriceIncreaseFormController { 

    ProductManager productManager; 

    @Autowired 
    public PriceIncreaseFormController(ProductManager productManager) { 
     this.productManager = productManager; 
    } 

    // note: this method does not have to be called onSubmit 
    @RequestMapping(method = RequestMethod.POST) 
    public String onSubmit(@ModelAttribute("priceIncrease") PriceIncrease priceIncrease, BindingResult result, SessionStatus status { 

     new PriceIncreaseValidator().validate(priceIncrease, result); 
     if (result.hasErrors()) { 
      return "priceincrease"; 
     } 
     else { 
      int increase = priceIncrease.getPercentage(); 
      productManager.increasePrice(increase); 
      status.setComplete(); 
      return "redirect:hello.htm"; 
     } 
    } 

    // note: this method does not have to be called setupForm 
    @RequestMapping(method = RequestMethod.GET)  
    public String setupForm(Model model) { 
     PriceIncrease priceIncrease = new PriceIncrease(); 
     priceIncrease.setPercentage(20); 
     model.addAttribute("priceIncrease", priceIncrease); 
     return "priceincrease"; 
    } 

} 
+1

Es sind diese acht Milliarden gültigen Möglichkeiten, die ich verachte und die ich normalerweise nur dazu bringe, den Controller direkt zu implementieren - zumindest dann kann ich die Schnittstelle nach Bedarf verfolgen. Sowohl die Annotationen als auch die Formular-Controller-Hierarchie verwirren IMO. – MetroidFan2002

+0

Der Schlüssel zu mir ist, dass die Annotation-basierten Controller wesentlich einfacher getestet werden können als die mit der alten Klassenhierarchie. Natürlich braucht es Zeit, sich daran zu gewöhnen. Ein weiteres Merkmal, das ich nicht mehr missen möchte, ist die Möglichkeit, die Methode Parameter Injektion zu erweitern, aber die Test-Sache ist die erste für mich. –

0

Jemand abgeschlossen dieses Projekt mit einer aktuellen MVC autowire kann und es ist auf Github, so dass Sie sehen können, wie alle Klassen verändert im Vergleich zu Spring-Tutorial.

Link: PriceIncreaseFormController

Verwandte Themen