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(); // 只调用一次
原文地址:https://www.cnblogs.com/nelson-hu/p/7363902.html