我有一个带有维护对象的struts2表单.维护有不同类型-为了简洁起见,我们说有RemovePart和InstallPart.该表单同时包含这两个字段,但是用户只能看到一个-这是基于用户在第一个下拉菜单中的选择.
确定我的Action收到数据后要实例化哪个Maintenance类的正确(最佳方法)是什么?到目前为止,我能想到的最好的方法是,尽管我不禁想到有更好的方法可以做到.
EDIT 6/24 14:18 GMT:RemovedPart和InstalledPart类的字段彼此不对应.
public class Maintenance {
private String maintenanceType;
private String removedSerialNumber;
private String removedPartName;
private String removedPartDescription;
private String removedPartPosition;
private String installedSerialNumber;
private String installedPartName;
private String installedPartSource;
// getters and setters
}
public class RemovedPart {
private String serialNumber;
private String partName;
private String partDescription;
private String partPosition;
public static createRemovedPart(Maintenance maintenance) {
return new RemovedPart(maintenance.getRemovedSerialNumber(),
maintenance.getRemovedPartName(), maintenance.getRemovedPartDescription(),
maintenance.getRemovedPartPosition());
}
private RemovedPart() {
this.serialNumber = serialNumber;
this.PartName = partName;
this.partDescription = partDescription;
this.partPosition = partPosition;
}
// getters and setters
}
public class InstalledPart {
//similar to RemovedPart
}
public class MaintAction extends ActionSupport {
Maintenance maintenance;
public String execute() {
if (maintenance.getMaintenanceType().equals("remove")) {
RemovedPart removed = RemovedPart.createRemovedPart(maintenance);
} else {
// you get the idea
}
// more logic
return SUCCESS;
}
解决方法:
我们不知道您的设计有多复杂或有多大,但是从显示的内容来看,如果Maintenance类声明了重复字段(例如,已删除和已安装的序列号)而没有同时使用它们,则因此,它们仅声明为由页面中选择的维护类型填充…然后,您不需要3个对象,也不需要重复的字段:
>声明具有单个字段的单个Maintenance类
>将其发布到不同的操作中,一个用于移除,一个用于安装.
单独的类型将帮助您从两种类型所运行的方法中确定要处理的维护类型.但是,最好将其转换为枚举:
public enum MaintenanceType {
INSTALLATION(1), REMOVAL(2);
private int type;
private MaintenanceType(int t) {
type = t;
}
public int getType() {
return type;
}
}
public class Maintenance {
private MaintenanceType type;
private String serialNumber;
private String partName;
// getters and setters
public boolean isInstallation(){
return type == MaintenanceType.INSTALLATION;
};
public boolean isRemoval(){
return type == MaintenanceType.REMOVAL;
};
}