Frage

Ich möchte diesen SimpleFormController um den in Spring MVC 2.5 eingeführten Annotationsunterstützung konvertieren

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;
    }

}

Federkonfiguration

<!-- 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>

Grundsätzlich möchte ich die gesamte XML -Konfiguration für die ersetzen /priceincrease.htm Bean mit Anmerkungen innerhalb der Java -Klasse. Ist das möglich, und wenn ja, was sind die entsprechenden Anmerkungen, die ich verwenden sollte?

Danke, Don

War es hilfreich?

Lösung

Es sieht so aus wie folgt, obwohl es ein wenig von Ihrer Konfiguration abhängt (Resolver usw.). Ich sollte auch beachten, dass es ungefähr acht Milliarden gültige Möglichkeiten gibt, dieses Ding zu schreiben. Siehe die Frühlingsdokumentation, 13.11.4 "Unterstützte Argumente der Handler -Methode und Rückgabetypen" für einen Überblick über den Wahnsinn. Beachten Sie auch, dass Sie den Validator automatisieren können

@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";
    }

}

Andere Tipps

Jemand hat dieses Projekt mit einem kürzlichen MVC abgeschlossen und es ist auf Github, sodass Sie sehen können, wie sich alle Klassen im Vergleich zu Spring's Tutorial verändern.

Verknüpfung: PriceIncreaseFormController

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top