Is inheritance possible in Struts2 using model?

I have a Driven Struts2 action that provides a correct JSON response. When I restructure the activity, I get an empty JSON response. Has anyone gotten inheritance working with Struts2 Model-Driven Actions?

Ive tried to explicitly set include properties in config struts:

<result name = "json" type = "json">
   <param name = "includeProperties">
      jsonResponse
   </param>
</result>

The code for all actions below is not valid code in use - for mine has been edited and removed.

Thanks in advance.

Action to provide the correct answer:

public class Bike extends ActionSupport implements ModelDriven, Preparable {

    @Autowired private Service bikeService;
    private JsonResponse jsonResponse;
    private com.ets.model.Vehicle bike;
    private int id;

    public Bike () {
        jsonResponse = new JsonResponse ("Bike");
    }

    @Override
    public void prepare () throws Exception {
        if (id == 0) {
            bike = new com.ets.model.Bike ();
        } else {
            bike = bikeService.find (id);
        }
    }

    @Override
    public Object getModel () {
        return bike;
    }

    public void setId (int id) {
        this.id = id;
    }

    public void setBikeService (@Qualifier ("bikeService") Service bikeService) {
        this.bikeService = bikeService;
    }

    public JsonResponse getJsonResponse () {
        return jsonResponse;
    }

    public String delete () {
        try {
            bike.setDeleted (new Date (System.currentTimeMillis ()));
            bikeService.updateOrSave (bike);
            jsonResponse.addActionedId (id);
            jsonResponse.setAction ("delete");
            jsonResponse.setValid (true);
        } catch (Exception exception) {
            jsonResponse.setMessage (exception.toString ());
        }
        return "json";
    }
}

Restructured actions that provide the wrong answer:

public abstract class Vehicle extends ActionSupport implements ModelDriven {

    @Autowired protected Service bikeService;
    @Autowired protected Service carService;
    protected JsonResponse jsonResponse;
    protected com.ets.model.Vehicle vehicle;
    protected int id;

    protected abstract Service service ();

    @Override
    public Object getModel () {
        return bike;
    }

    public void setId (int id) {
        this.id = id;
    }

    public void setBikeService (@Qualifier ("bikeService") Service bikeService) {
        this.bikeService = bikeService;
    }

    public void setCarService (@Qualifier ("carService") Service carService) {
        this.carService = carService;
    }

    public JsonResponse getJsonResponse () {
        return jsonResponse;
    }

    public String delete () {
        try {
            vehicle.setDeleted (new Date (System.currentTimeMillis ()));
            service (). updateOrSave (vehicle);
            jsonResponse.addActionedId (id);
            jsonResponse.setAction ("delete");
            jsonResponse.setValid (true);
        } catch (Exception exception) {
            jsonResponse.setMessage (exception.toString ());
        }
        return "json";
    }

}

public class Bike extends Vehicle implements Preparable {

    public Bike () {
        jsonResponse = new JsonResponse ("Bike");
    }

    @Override
    public void prepare () throws Exception {
        if (id == 0) {
            vehicle = new com.ets.model.Bike ();
        } else {
            vehicle = bikeService.find (id);
        }
    }

    @Override
    protected Service service () {
        return bikeService;
    }

}

public class Car extends Vehicle implements Preparable {

    public Car () {
        jsonResponse = new JsonResponse ("Car");
    }

    @Override
    public void prepare () throws Exception {
        if (id == 0) {
            vehicle = new com.ets.model.Car ();
        } else {
            vehicle = carService.find (id);
        }
    }

    @Override
    protected Service service () {
        return carService;
    }

}
+2


a source to share


1 answer


Moved type code for child classes and corrected getModel () method to return correct domain object:



public abstract class Vehicle extends ActionSupport
        implements ModelDriven, Preparable {

    protected int id;

    protected abstract Service service();
    public abstract void setService(Service service);
    public abstract JsonResponse getJsonResponse();

    public void setId(int id) {
        this.id = id;
    }

    public String delete() {
        JsonResponse jsonResponse = getJsonResponse();
        try {
            getModel().setDeleted(new Date(System.currentTimeMillis()));
            service().updateOrSave(getModel());
            jsonResponse.addActionedId(id);
            jsonResponse.setAction("delete");
            jsonResponse.setValid(true);
        } catch (Exception exception) {
            jsonResponse.setMessage(exception.toString());
        }
        return "json";
    }
}

public class Bike extends Vehicle {

    @Autowired protected Service bikeService;
    private com.ets.model.Bike model;

    @Override
    public void prepare() throws Exception {
        if (id == 0) {
            model = new com.ets.model.Bike();
        } else {
            model = bikeService.find(id);
        }
    }

    @Override
    public Object getModel() {
        return model;
    }

    @Override
    protected Service service() {
        return bikeService;
    }

    @Override
    public void setService(@Qualifier("bikeService") Service bikeService) {
        this.bikeService = bikeService;
    }

    @Override
    public JsonResponse getJsonResponse() {
        return new JsonResponse("Bike");
    }
}

public class Car extends Vehicle {

    @Autowired protected Service carService;
    private com.ets.model.Car model;

    @Override
    public void prepare() throws Exception {
        if (id == 0) {
            model = new com.ets.model.Car();
        } else {
            model = carService.find(id);
        }
    }

    @Override
    public Object getModel() {
        return model;
    }

    @Override
    protected Service service() {
        return carService;
    }

    @Override
    public void setService(@Qualifier("carService") Service carService) {
        this.carService = carService;
    }

    @Override
    public JsonResponse getJsonResponse() {
        return new JsonResponse("Car");
    }
}

      

0


a source







All Articles