Struts2 模型驱动动作中的继承可能吗?
Posted
技术标签:
【中文标题】Struts2 模型驱动动作中的继承可能吗?【英文标题】:Is Inheritance in Struts2 Model-Driven Action possible? 【发布时间】: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); @覆盖 受保护的服务服务() 还车服务;【问题讨论】:
您的示例中的自行车和车辆字段之间似乎有些混淆,您能否澄清您的示例并验证它是否可以编译? 【参考方案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");
【讨论】:
以上是关于Struts2 模型驱动动作中的继承可能吗?的主要内容,如果未能解决你的问题,请参考以下文章
使用继承类中的字段的 Django 模型约束条件 - 可能吗?