springMVC 踩过的坑 - 记录
1. 后台持久层Spring Jpa(即hibernate), 前台angularJS(angularJS只接受json串), 在后台使用DTO层对象代替domain(entity)与前台交互时,
传递的DTO对象中也包含对象,被包含对象也一定是对应domain的DTO, 因为只有DTO可以序列化和反序列化,用作于表现层的传递对象。
如下:
public class VehicleAnnualAuditDTO {
private Long id;
private Boolean deleted;
// 关联车辆
// 要包含一个其他对象, 类型必须是其对应的DTO类,属性名需要与对应的domain类中的属性名相同,这样自动转化工具比如(ObjectMapper或ModelMapper)能够识别并转化
private VehicleDTO vehicle;
// 年审时间
private String annualDate;
// 办理人姓名
private Staff agent;
// 备注
private String remark;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Boolean getDeleted() {
return deleted;
}
public void setDeleted(Boolean deleted) {
this.deleted = deleted;
}
public VehicleDTO getVehicle() {
return vehicle;
}
public void setVehicle(VehicleDTO vehicle) {
this.vehicle = vehicle;
}
public String getAnnualDate() {
return annualDate;
}
public void setAnnualDate(String annualDate) {
this.annualDate = annualDate;
}
public Staff getAgent() {
return agent;
}
public void setAgent(Staff agent) {
this.agent = agent;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
public VehicleAnnualAuditDTO() {
super();
}
}
2. 在编写初始化init函数或者其他函数时:切忌要认清该函数的任务, 不要把初始化变量全写在里面然后每次点击都调用,这样会导致初始化数据归置,应该只调用初始化函数一次:
例子:(血的教训啊)
//该函数的主要任务是初始化参数和数据 (*其实该函数取名就不太对,要配置参数就光参数,要刷新数据就刷新数据,怎么还先配置参数在刷新数据,全还在一起了,以后调用肯定出错) function initialize() { debugger; // 初始化参数 $scope.one = "hello"; $scope.filter = {}; // 过滤器 // 分页参数 $scope.pageSize = [2, 5, 10]; $scope.pageInfos = {}; // 初始化第一页 toPage(1, 2, null); } // 而我在前台调用的地方却是一个经常点击的事件, 该事件其实只需要获取数据 ,而我却调用了上面这个方法,导致每次调用参数都会归置 <uib-tabset active="1" justified="true"> <uib-tab index="0" heading="汽车" th:include="vehicle/info/templates::car" select="initialize()">汽车</uib-tab> //select是一个经常点击的事件,我调用的方法应该只包含数据的刷新而不包含参数 <uib-tab index="1" heading="工作车" th:include="vehicle/info/templates::workingCar" select="toWorkingCar()">工作车</uib-tab> <uib-tab index="2" heading="可用车辆" th:include="vehicle/info/templates::vehicleAvailable" select="toVehicleAvailable()">可用车辆</uib-tab> </uib-tabset>
正确的做法是:
$scope.toVehicleAvailable = function() { //在调用的方法中只处理数据的更新,在参数配置放在另一个函数中 initAvailableVehicle(); }; function initialGanttConfig() { // 专门预处理参数的方法,确保该方法只走一次而不是每次带年纪都走,那样参数每次都重新赋值岂不是权利乱套了全 // 初始化gantt图配置 $scope.headersFormats = { 'year': 'YYYY年', month: 'YYYY年-MM月', week: '第w周', day: 'DD', hour: 'HH:', minute: 'HH:mm', second: 'H:mm:ss', }; $scope.fromDate = dateService.getMonday();// gantt图开始日期:当前周的周一 $scope.toDate = dateService.getSunday();// gantt图截止日期:当前周的周末 // 监听日期变化 }; initialGanttConfig(); // 只调用一次

浙公网安备 33010602011771号