3

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

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

<结果名称="json" 类型="json">
   <param name="includeProperties">
      json响应
   </param>
</结果>

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

提前致谢。

提供正确响应的操作:

公共类 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);
        }
    }

    @覆盖
    受保护的服务服务(){
        还车服务;
    }

}
4

1 回答 1

0

将特定于类型的代码移至子类,并修复 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");
    }
}
于 2012-02-12T08:09:02.497 回答