【问题标题】:Is Inheritance in Struts2 Model-Driven Action possible?Struts2 模型驱动动作中的继承可能吗?
【发布时间】:2011-02-13 18:20:11
【问题描述】:

我有一个模型驱动的 Struts2 操作,可提供正确的 JSON 响应。当我重新构建操作时,我得到一个空的 JSON 响应。有没有人使用 Struts2 模型驱动操作获得继承?

我尝试在 struts 配置中明确设置包含属性:

json响应 结果>

下面所有操作的代码 - 不是实际使用的代码 - 为了清楚起见,我已经编辑和剥离。

提前致谢。

提供正确响应的操作:

公共类 Bike 扩展 ActionSupport 实现 ModelDriven,Preparable { @Autowired 私人服务自行车服务; 私人 JsonResponse jsonResponse; 私人 com.ets.model.Vehicle 自行车; 私人 int id; 公共自行车(){ jsonResponse = new JsonResponse("Bike"); } @覆盖 公共无效准备()抛出异常{ 如果(id == 0){ 自行车 = 新的 com.ets.model.Bike(); } 别的 { 自行车 = bikeService.find(id); } } @覆盖 公共对象 getModel() { 归还自行车; } 公共无效setId(int id){ 这个.id = id; } 公共无效setBikeService(@Qualifier(“bikeService”)服务bikeService){ this.bikeService = 自行车服务; } 公共 JsonResponse getJsonResponse() { 返回json响应; } 公共字符串删除(){ 尝试 { 自行车.setDeleted(新日期(System.currentTimeMillis())); bikeService.updateOrSave(自行车); jsonResponse.addActionedId(id); jsonResponse.setAction("删除"); jsonResponse.setValid(true); } 捕捉(异常异常){ jsonResponse.setMessage(exception.toString()); } 返回“json”; } }

提供错误响应的重组操作:

公共抽象类 Vehicle 扩展 ActionSupport 实现 ModelDriven { @Autowired 受保护的服务自行车服务; @Autowired 受保护的服务汽车服务; 受保护的 JsonResponse jsonResponse; 受保护的 com.ets.model.Vehicle 车辆; 受保护的 int id; 受保护的抽象服务服务(); @覆盖 公共对象 getModel() { 归还自行车; } 公共无效setId(int id){ 这个.id = id; } 公共无效setBikeService(@Qualifier(“bikeService”)服务bikeService){ this.bikeService = 自行车服务; } 公共无效 setCarService(@Qualifier("carService") 服务 carService) { this.carService = 汽车服务; } 公共 JsonResponse getJsonResponse() { 返回json响应; } 公共字符串删除(){ 尝试 { 车辆.setDeleted(新日期(System.currentTimeMillis())); 服务()。更新或保存(车辆); jsonResponse.addActionedId(id); jsonResponse.setAction("删除"); jsonResponse.setValid(true); } 捕捉(异常异常){ jsonResponse.setMessage(exception.toString()); } 返回“json”; } } 公共类 Bike 扩展 Vehicle 实现 Preparable { 公共自行车(){ jsonResponse = new JsonResponse("Bike"); } @覆盖 公共无效准备()抛出异常{ 如果(id == 0){ 车辆 = 新 com.ets.model.Bike(); } 别的 { 车辆 = bikeService.find(id); } } @覆盖 受保护的服务服务(){ 返还自行车服务; } } 公共类 Car 扩展 Vehicle 实现 Preparable { 公共汽车(){ jsonResponse = new JsonResponse("汽车"); } @覆盖 公共无效准备()抛出异常{ 如果(id == 0){ 车辆 = 新的 com.ets.model.Car(); } 别的 { 车辆 = carService.find(id); } } @覆盖 受保护的服务服务(){ 还车服务; } }

【问题讨论】:

  • 您的示例中的自行车和车辆字段之间似乎有些混淆,您能否澄清您的示例并验证它是否可以编译?

标签: java web-applications struts2 model-driven


【解决方案1】:

将特定类型的代码移至子类,并修复 getModel() 以返回正确的域对象:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-13
    • 2017-12-18
    • 1970-01-01
    • 2012-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多