How to setup FORM binding in Spring MVC 4.3 to have in controller an appropriate child object of the inheritance tree
Asked Answered
S

0

7

I'm making changes in a very old application. which is using Spring MVC 4.

I need to post data from a form:form tag within in JSP for Spring controller. UI is fixed and I can only make changes at server side. Based upon a specific field in my submitted Form, I want to have the correct child Object instance in my Controller Handler method parameter.

For example,

class Payment {...}
class CardPayment extends Payment{...}
class CheckPayment extends Payment{...}

In UI form, there will be a input value called paymentType. payment will be commandObject or ModelAttribute

I want my @PostMapping Controller to have the correct child object in the argument. I don't want to manually instantiate it in controller code.

@PostMapping
public ModelAndView doSomePay(@ModelAttribute("payment") Payment paymentInput, BindingResult result){

Now I want this paymentInput object above to be of type CardPayment or checkPayment.

I tried to create a @initBinder and WebDatabinder but in reality I have close to 10 subclasses, do i need to create "Editor" for all those ?

If yes,whats the best way to create the propertyEditor short and quick

@InitBinder
    public void initBinder(WebDataBinder binder, HttpServletRequest request) {
        String paymentType = request.getParameter("paymentType");

        PropertyEditor productEditor;
       //somehow I can find the correct child class that I need to see, for example CardPatment.class ,  Now how to do following 

       binder.set(Product.class,productEditor); ???
}
Scythe answered 23/4, 2020 at 9:5 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.