У меня есть действие на основе модели Struts2, которое обеспечивает правильный ответ JSON. Когда я реструктурирую действие, я получаю пустой ответ JSON. Кто-нибудь получил наследование, работающее с действиями Struts2 Model-Driven?
Я пытался явно установить свойства include в конфигурации Struts:
<result name="json" type="json">
<param name="includeProperties">
jsonResponse
</param>
</result>
Код для всех действий ниже - не фактический используемый код - я отредактировал и сократил для ясности.
Заранее спасибо.
Действие, обеспечивающее правильный ответ:
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";
}
}
Реорганизованные действия, обеспечивающие неправильный ответ:
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;
}
}